你可以做这样的事情:
List<MyJoinObject> result =
list1.stream().map(o1 -> {
Optional<MyObject2> error = list2.steam()
.filter(o2 -> o2.getId() == o1.getId())
.findAny();
if (error.isPresent())
return new MyJoinObject(o1.getId(), o1.getName(), error.get().getError());
return new MyJoinObject(o1.getId(), o1.getName());
}).collect(Collectors.toList());
您也可以通过做构建在做之前ID映射错误的hasmap:
final Map<Integer, MyObject2> errorsById =
list2.stream()
.collect(Collectors.toMap(MyObject2::getId, Function.identity()));
如果你这样做,你可以使用这张地图通过调用方法containsKey()
或get()
来检索错误
如果你给[mcve]包括你到目前为止尝试过的东西,这将会非常有帮助。如果单个MyObject1有多个错误会发生什么? –
每个对象列表都包含一个由id属性组成的唯一对象,因此对象可以有一个或一个错误。 – SharonBL
嗯。在LINQ(.NET)中,这将是微不足道的。不幸的是,我不确定在Java流中进行组连接的等价物。我仍然强烈建议你用[mcve]更新你的问题,这将使人们更容易帮助你。包括示例输入数据(硬编码)和预期输出数据......以及您已经尝试过的任何内容。 –