你能帮我为两个不同的列表编写两个嵌套的foreach循环吗?我需要比较两个列表中存储的特定对象属性?
List<Object1> listOfObject1 = mapper.selectObject1ByName(value1);
List<Object2> listOfObject2 = mapper.selectObject2ByName(value2);
listOfObject1.stream().forEach(object1 -> {
listOfObject2.stream().forEach(object2 -> {
if (object1.getCode() == object2.getCode()) {
//do something
}
});
});
当然,我得到了这个错误:“lambda表达式中使用的变量应该是final或effective final”,但是我不能使任何列表成为final,因为上面有一些决策逻辑,我用正确的值填充列表,并且在更多的地方写入列表。
3条答案
按热度按时间avkwfej41#
如果执行
// do something
零件需要以下任一项object1
或者object2
,则可以将适当的代码收集到一个单独的集合中,稍后用于过滤其他列表中的条目。例如,如果
object2
必须消耗:如果两者都有
object1
以及object2
使用的方法如下:代码图
Map<Integer, List<Object1>> mapCodes
可以使用groupingBy
然后申请filter
以及forEach
:am46iovg2#
我们可以简单地使用hashmap来保留list2的所有元素,然后我们可以迭代list1的元素并检查它是否存在于hashmap中。
然后你就可以进行必要的操作了。
list2.foreach(e->mapofements.put(e.getcode(),e));
ia2d9nvy3#
我认为您可以定义一个比较函数并使用它来比较列表中的数据。我建议使用java
Comparator
班级。这样用户就必须定义compare(T o1, T o2)
以及equals(Object obj)
功能。