我有以下代码:
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;
}
现在,我有两个房屋列表oldHouse
和newHouse
,这两个列表都填充了相同的房屋元素,但是嵌套的列表房屋任务在newHouse中更新了一个额外的任务。
如何获得一个新的列表addedTasksForHouse
,该列表包含通过Java8流添加的任务?
这一直在破坏我的大脑,我似乎无法让它工作。
我认为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());
让我知道这是否适合你
下面的代码符合您的要求。注意:这假设两个输入列表的顺序相同。
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,名称,年龄,地址,颜色,类,国家,部