我有两个集合,它们都由相同类型的对象组成,这种类型的对象有一个字段,在本例中为'codeType'。使用新的Java 8 API流和lambda表达式检查两个集合
我需要检查在第二个集合中,所有'codeTypes'与第一个集合中的相同,没有额外添加。我可以这样做,只是迭代两个集合以获取id,然后检查它们。 但是当我们使用的是Java 8,我想用流和lambda表达式(因为我学习吧)
这是迄今为止我所做的一切它做的事:
Boolean collectionEquals = CollectionUtils.isNotEmpty(oldOrderPositions)
? oldOrderPositions.stream()
.mapToLong(oldPosition ->
oldPosition.getCodeType().getId())
.allMatch(newOrderPositions.stream()
.mapToLong(newPosition ->
newPosition.getCodeType().getId()))
: false;
基本上我获取两个集合,我遍历它们以获取Id,然后检查所有id的匹配。然而,我收到一个编译错误,说“LongMream中的allMatch(java.util.fuction.Predicate)不能应用于(java.util.stream.LongStream)”
你能帮我吗?我不知道我在做什么错,或者我在误会。
谢谢您的时间
我觉得你正在重塑车轮..请使用这样的Google guava项目之一http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/com/google/common/ collect/Iterables.html#elementsEqual(java.lang.Iterable,java.lang.Iterable) – rakpan 2015-03-13 10:55:14
@FirstX为什么他应该为这个简单的问题使用一个库? – dit 2015-03-13 11:01:27
@dit因为它不是**“简单的问题”。这是一个不平凡的比较操作,并且流并不适合这种情况。使用一个库来完成你想要的(和正确的)是最好的创建一个DIY窃听效用方法 – Vogel612 2015-03-13 11:13:12