Java 8 Stream filter方法和Optional对象结合简化代码方法
java 8 stream api 中的filter方法用于筛选出集合中符合条件的元素
比如找到用户集合中名称叫王五的元素,代码如下
public class Main {
private static class User {
private int id;
private String name;
public User(int id, String name) {
this.id = id;
this.name = name;
public int getId() {
return id;
public String getName() {
return name;
public static void main(String[] args) {
List<User> userList = Arrays.asList(
new User(1, "张三"),
new User(2, "李四"),
new User(3, "王五")
List<User> found = userList.stream()
.filter( ite -> ite.name.equals("王五"))
.collect(Collectors.toList());
}
found变量就是筛选的结果
接着我们要使用这个元素,如果元素存在则直接取出,如果不存在,则自己创建一个,一般我们会这么去实现
User user;
if( found.size() > 0 ) {
user = found.get(0);
} else {
user = new User(3,"王五");
}
或者
User user = found.size() > 0 ? found.get(0) : new User(3,"王五");
这两种方法是通过条件分支去实现,当然, 不是说它们不好,事实上在java 8之前也只能这么用,但是在java 8之后却有更好的方法可以用
Optional<User> optionalUser = userList.stream()
.filter( it -> it.name.equals("王五"))
.findAny();