Java streams compare属性在两个列表之间相等,并返回true或false
class Pair {
String key;
String value;
}
List<Pair> list1 = Stream.of(
new Pair("key1", "value1"),
new Pair("key2", "value2")
)
.collect(Collections.toList());
List<Pair> list2 = Stream.of(
new Pair("key1", "value2"),
new Pair("key2", "value3")
)
.collect(Collections.toList());
我想对list2
中的值执行一些更改,然后将其与list1
进行比较
我想检查与列表1相比,列表2中所有项目的属性键是否都没有改变。在列表2中只能更改value属性
列表2中的项目数与列表1中的项目数相同。size()=list2。大小()
我试图编写一个返回布尔值的流,但肯定是我弄错了
list1.stream()
.allMatch(pair2-> list2.stream()
.anyMatch(pair->pair.getKey().equals(pair2.getKey())));
// Need to add list size() comparison too
更新: 我成功地编写了一个这样的流,junit测试似乎可以工作,尽管它不比较与ernest_k的答案相同索引的项
list1.stream()
.allMatch(pair -> list2.stream()
.anyMatch(pair2-> pair.getKey().equals(pair2.getKey()) ) && list1.size()== list2.size()
));
# 1 楼答案
您可以构造一个查找表来引用原始密钥
# 2 楼答案
你可以使用:
由于必须逐个元素比较List元素,因此不能使用嵌套流,因为它(如在您的示例中)只需执行笛卡尔连接,如果每个
list1
元素都有任何具有相同键的list2
元素,则返回true(而您希望该比较具有索引意识)