我有以下代码:
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 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());
如果这对你有用请告诉我
下面的代码做你想要的。
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中断言相等性,而不仅仅是比较列表。