#java-8
Вопрос:
class MyObject {
String key;
String value;
}
У меня есть два списка, listA
listB
содержащих MyObject
объекты.
Я пытаюсь преобразовать нижеприведенные вложенные циклы for в потоки Java8 на основе :
for(String objA : listA) {
for(String objB : listB) {
if(objA.getKey().equals(objB.getKey()) amp;amp; !objA.getValue().equals(objB.getValue())) {
// create an object of a different class `MyDiff` with params as
// objA.getKey(), objA.getValue(), objB.getValue()
// and push it to a list.
}
}
}
Я попытался решить эту проблему с помощью JAVA8, как,
List<MyDiff> diff = listA.streams().filter(objA -> {
listB.stream.anyMatch(objB -> objA.getKey().equals(obj.getKey()) amp;amp; !objA.getValue().equals(obj.getValue()))
})
Но anyMatch
не возвращает объект, и я не могу использовать filter
его вместо него.
Ответ №1:
Вы можете использовать оператор flatMap()
и filter()
для завершения.
List<MyDiff> diff =
listA.stream().flatMap(objA ->
listB.stream()
.filter(objB -> objA.getKey().equals(objB.getKey()) amp;amp; !objA.getValue().equals(objB.getValue()))
.map(objB -> new MyDiff(objA.getKey(), objA.getValue(), objB.getValue())))
.collect(Collectors.toList());