文章目录
1.说明
本文介绍stream中查找和匹配的使用方法,allMatch/anyMatch/noneMatch/findFirst/findAny
2.代码
初始化listUser集合
@Slf4j
public class Mode1 {
List<User> listUser = new ArrayList<>();
@Before
public void initList() {
listUser = this.getListUsers();
}
private List<User> getListUsers() {
List<User> listUser = new ArrayList<User>();
for (int i = 0; i < 10; i++) {
listUser.add(new User("user" + i, i));
}
return listUser;
}
}
User对象
package com.huajie.Lambda;
import lombok.Data;
@Data
public class User {
private String name;
private Integer age;
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
}
2.1 anyMatch
检查集合中是否至少匹配一个元素
/**
* anyMatch
*/
@Test
public void testAnyMacth() {
boolean flag = listUser.stream().anyMatch(user -> user.getAge() > 10);
log.info(String.valueOf(flag));
}
2.2 allMatch
检查集合中是否全部元素都匹配
/**
* allMatch
*/
@Test
public void testAllMacth() {
boolean flag = listUser.stream().allMatch(user -> user.getAge() >= 0);
log.info(String.valueOf(flag));
}
2.3 noneMatch
检查集合中是否全部元素都不匹配
/**
* noneMatch
*/
@Test
public void testNoneMatch() {
boolean flag = listUser.stream().noneMatch(user -> user.getAge() > 10);
log.info(String.valueOf(flag));
}
2.4 findAny
返回满足条件的第一个
/**
* findAny 返回满足条件的第一个
*/
@Test
public void testFindAny() {
Optional<User> userOptional = listUser.stream().filter(user -> user.getAge() > 5).findAny();
log.info(userOptional.get().getName());
}
2.5 findFirst
返回满足条件的第一个
/**
* findFirst 返回满足条件的第一个
*/
@Test
public void testFindFirst() {
Optional<User> userOptional = listUser.stream().filter(user -> user.getAge() > 5).findFirst();
log.info(userOptional.get().getName());
}
2.6 Optional类
Optional类是一个容器类,也是jdk1.8之后的新特性,代表一个值存在或者不存在。在上面的代码中findAny和findFirst可能上面元素都没找到。java8引入了Optional是为了避免出现null值的问题。
Optional对象.get()就可以获取到user对象。
2.7 findAny和findFirst区别
并行流处理,找到第一个元素在并行时限制更多。如果不关心返回的元素是哪个,使用findAny即可。
普通流listUser.stream()
和并行流listUser.parallelStream()