直接上代码,比较实在。
对象A
public Class A{
private Long id;
private String userName;
.....
....省略get和set方法
}
在List<A>中,查找userName为hanmeimei的对象A。
在java8中,我们可以这么玩
1,查找集合中的第一个对象。
Optional<A> firstA= AList.stream() .filter(a -> "hanmeimei".equals(a.getUserName())) .findFirst();
关于Optional,java API中给了解释。
A container object which may or may not contain a non-null value. If a value is present, isPresent() will return true and get() will return the value.
所以,我们可以这样子使用
if (firstA.isPresent()) {
A a = firstA.get(); //这样子就取到了这个对象呢。
}
else {
//没有查到的逻辑
}
2,如果想返回集合呢。可是使用这个
List<A> firstA= AList.stream() .filter(a -> "hanmeimei".equals(a.getUserName())) .collect(Collectors.toList());
3,抽取对象中所有的id的集合
1 |
|
例子:用stream 代替下面这段代码:
for (PrecCoverageTypeDTO coverageType : getObjects()) {
policyCoverage.getCoverageTypes().add(coverageType.getCode());
}
getObjects().stream().map(PrecCoverageTypeDTO::getCode).
filter(StringUtils::isNotEmpty).
forEach(policyCoverage.getCoverageTypes()::add);
getObjects() 得到的是一个List<PrecCoverageTypeDTO> 对象,对每个 List 对象,调用 getCode 方法,得到 List<String> 对象,然后 filter 取出不为 null 的对象,又得到一个新的 List<String> 对象,再用 forEach 遍历每个对象调用 add 方法,把这些 String 类型的 list 对象 add 到 policyCoverage 对象里
这里的 map 的作用的是 getObject() 返回的 list 对象的类型<PrecCoverageTypeDTO> 里的方法,换句话说就是 map 里所调用的方法(比如:getCode)必须是 list 对象类型里的方法,forEach 里所调用的方法则可以是其他的方法
例子:用 forEach 遍历 list 对象,并在里面写逻辑:
List<String> list = new ArrayList<>();
list.add("1"); list.add("2");
list.forEach(l->{
if(l!=null){
System.out.println("hello");
}
});
总之,超级好用