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

比较在list[closed]中封装在自定义对象中的两个列表

龚寂弦
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添加了新的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<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 house1 has no difference, for house2 there is a difference called task3. 
        System.out.println(taskDiffList);

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

  • 我需要比较insert方法中的两个对象。但我无法弄清楚在哪里以及如何实现可比或比较器。我的代码如下所示: 这是我为二叉树创建的节点。

  • 我想获得客户总购买的平均值并将其存储在@x中 然后我想存储供应商总采购的平均值,并将其存储在@Y中

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

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

  • 在爪哇中。如果我们必须将一个对象与另一个对象进行比较。我们比较该对象中的每个字段。 学生 1 对象具有标记 1、标记 2、标记 3、名称、年龄作为字段。学生 2 对象具有标记 1、标记 2、标记 3、名称、年龄作为字段。因此,要检查2名学生是否相等...我们比较每个字段。 但是,如果 Student 对象有许多字段,该怎么办?学生1对象有标记1,标记2,标记3,名称,年龄,地址,颜色,类,国家,部