在 Java 中拼接 arraylist 并将第二部分分组

Splice arraylist in Java and group the second part

我有一个 Dto 列表,由 'userName' 和 'skills' 组成。例如: 用户名:"John",技能:5

如果有超过 5 个元素(即 5 个用户),我想保留前五个,并将另一个分组在一个名称('Others')和一项技能(所有技能的总和)下技能)。我想到了使用 sublist 方法,创建两个临时数组,将第二个数组的 dto 分组并合并到主 Arraylist 中。 这是我的代码,但它不起作用。为什么?

final List<MyDto> usersData = mydao.getUsers();
List<MyDto> result = new ArrayList<MyDto>();    


if (usersData != null && usersData.size() > 0) {
    List<MyDto> tmpFirstFiveUsers = new ArrayList<MyDto>();

    List<MyDto> tmpOthers = new ArrayList<MyDto>();


    if(usersData.size() > 5) {
        // Save first 5 users
        tmpFirstFiveUsers = usersData.subList(0, 5);

        // Save others
        tmpOthers = usersData.subList(5, usersData.size());

        // Sum of 'others' skill
        int skills = 0;
        for (MyDto other : tmpOthers) {
            skills += other.getSkills();
        }

        String other = "Altro";

        MyDto emptyDto = new MyDto();
        emptyDto.setUserName(other);
        emptyDto.setSkills(skills);

        tmpOthers.clear();

        tmpOthers.add(emptyDto);
      } 

        result.clear();

        result.addAll(tmpFirstFiveUsers);
        result.addAll(tmpOthers);

更新: 我不能正确地做子列表,它不起作用。 我也举个例子来理解: 用户数据:

我期望的是: 用户数据:

作为列表的 List#sublist() returns 视图,因此在子列表中执行的所有修改都反映在该 "parent" 列表中。这就是为什么你会得到意想不到的结果。要安全地操作子列表,您应该 copy items:

tmpFirstFiveUsers = new ArrayList<>(usersData.subList(0, 5));
tmpOthers = new ArrayList<>(usersData.subList(5, usersData.size()));