假设我有List<Foo>
个对象,User
内有Foo
个对象:
public class Foo {
public User user;
}
public class User {
int id;
int typeId;
}
假设我有一个接受User对象和List对象的方法。如果任何Foo对象的User与传入方法的用户不同,Java8中是否有一种有效的方式来流式传输Foo对象并快速返回?
public boolean validate(User loggedInUser, List<Foo> objectsToVerify);
我的想法是:
return objectsToVerify.stream().filter(o -> o.user != loggedInUser).collect(Collections.toList()).isEmpty();
答案 0 :(得分:1)
return objectsToVerify.stream().allMatch(o -> o.user.equals(loggedInUser));
应该是你所追求的。
可能会将equals()
和hashCode()
添加到User
。
或者如果你想使用方法参考
return objectsToVerify.stream().map(Foo::getUser).allMatch(loggedInUser::equals);
答案 1 :(得分:0)
是的,这对于流来说很简单。假设存在Foo.getUser
和Foo.equals
,则:
return !objectsToVerify.stream()
.map(Foo::getUser)
.allMatch(loggedInUser::equals);
你提到过#fast;&#39;。这将在第一次不匹配时返回true
。如果您的列表真的很大,那么您可以使流并行,以便可以在多个线程中搜索它。但除非有数百万个对象要验证,否则这对整体性能不太重要。
答案 2 :(得分:0)
这可以解决你的问题:
return !objectsToVerify.parallelStream()
.anyMatch(o -> !o.user.equals(loggedInUser));