当前位置: 首页 > 知识库问答 >
问题:

比较封装在列表内部自定义对象中的两个列表

尤夕
2023-03-14

我有以下代码:

public class Person { 
  private String id;
  private String name;
  private List<House> house
}
public class House { 
  private String id;
  private String name;
  private List<HouseTask> houseTasks;
}

现在,我有两个房屋列表oldHousenewHouse,这两个列表都填充了相同的房屋元素,但是嵌套的列表房屋任务在newHouse中更新了一个额外的任务。

如何获得一个新的列表addedTasksForHouse,该列表包含通过Java8流添加的任务?

这一直在破坏我的大脑,我似乎无法让它工作。

共有2个答案

赵渊
2023-03-14

我觉得FlatMap可以解决你的问题

ArrayList oldHouses=新ArrayList

ArrayList newHouses=新ArrayList

//所有的房子

ArrayList AddedTaskForHouses=新ArrayList

         addedTasksForHouses = newHouses.stream()
        .flatMap(House-> House.gethouseTasks().stream())
        .collect(Collectors.toList());

//每家每户

ArrayList AddedTaskForHouse=新ArrayList

    addedTasksForHouse = newHouses.get(indexOfHouse).gethouseTasks()
                      .stream()
                      .collect(Collectors.toList());

如果这对你有用请告诉我

胡光霁
2023-03-14

下面的代码做你想要的。

class Scratch {
    public static class House {
        private String id;
        private String name;
        private List<HouseTask> houseTasks = new ArrayList<>();
        //this new method returns the list of tasks that otherHouse has, but this house has not
        public List<HouseTask> findNewTasks(House otherHouse) {
            return otherHouse.houseTasks.stream()
                    .filter(ht -> !houseTasks.contains(ht))
                    .collect(Collectors.toList());
        }
    }

    static class HouseTask {
        //houseTask now has a name. this name is also used to compare HouseTasks to another, see the equals method
        String name;
        public HouseTask(String name) {this.name = name;}
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            HouseTask houseTask = (HouseTask) o;
            return Objects.equals(name, houseTask.name);
        }
        public String toString() {
            return "HouseTask: "+name;
        }
    }

    public static void main(String[] args) {

        //now let's create some example data:
        House h1 = new House();
        h1.houseTasks.add(new HouseTask("task1"));
        House h2 = new House();
        h2.houseTasks.add(new HouseTask("task2"));
        House h2changed = new House();
        h2changed.houseTasks.add(new HouseTask("task2"));
        h2changed.houseTasks.add(new HouseTask("task3"));

        //here you have the 2 inputs from your question. the second House in newHouses has the new task "task3".
        List<House> oldHouses = List.of(h1, h2);
        List<House> newHouses = List.of(h1, h2changed);

        //we now iterate over the two lists, taking a look at each house.
        //the difference in each house's tasks is collected into one resulting list
        //note: this assumes that the individual houses are at the same position in both input lists!
        List<HouseTask> taskDiffList = IntStream.range(0, oldHouses.size())
                .mapToObj(i -> oldHouses.get(i).findNewTasks(newHouses.get(i)))
                .flatMap(List::stream)
                .collect(Collectors.toList());

        //this prints "[HouseTask: task3]" since it's the only difference.
        System.out.println(taskDiffList);

    }
}
 类似资料:
  • 我有以下代码: 现在,我有两个房屋列表和,这两个列表都填充了相同的房屋元素,但是嵌套的列表房屋任务在newHouse中更新了一个额外的任务。 如何获得一个新的列表,该列表包含通过Java8流添加的任务? 这一直在破坏我的大脑,我似乎无法让它工作。

  • 第一次来这里,所以我希望这是有意义的! 我有两个对象数组,比如l1和l2,我想在这两个列表之间进行比较,并在l3中得到一个不匹配的值。用户类包含2个字符串: 比如,l1包含:Java、JSF、JAXR、foo l2包含:JSF、JAXR 我可以对匹配的值进行比较,但不能对不匹配的值进行比较。这种逻辑似乎有缺陷。有什么帮助吗? 对于匹配值: 但是,对于不匹配,当我说不等于时,我得到的不是唯一的值,而

  • 问题内容: 我有两个列表 , 都包含 MyData 类型的对象,而 MyData* 包含这些变量。 利斯塔和数组listB都包含MyData的对象,现在我要两个列表的对象值比较这里 的名字 ,以及 检查 变量一样,如果 利斯塔 包含这些对象值 和ListB也包含 然后我必须比较列表并返回false,因为两个列表相同但是如果ListA包含 和 ListB 包含 然后我必须比较列表并返回true,因为

  • 我有两个包含该类对象的列表: 我想通过学生比较一下那两个列表中的对象。我得比较一下列表然后得到下面的数据 我需要创建一个新列表,其中包含中存在但不在中的 对象 我需要创建一个新列表,其中包含那些对象,这些对象存在于中,但不存在于中 我需要创建一个新列表,其中包含使用java8流出现在两个列表中的对象 我尝试使用下面的代码 查找获得TC的学生(存在于列表1中但不存在于列表2中) 查找新的许可(存在于

  • 这与Java比较两个列表的不同之处在于,我需要能够在jUnit中断言相等性,而不仅仅是比较列表。