基础操作符
终端操作符:forEach
@Slf4j
public class BasicOperatorTests {
private static final User[] arrayOfUsers = {
User.builder().id(1L).username("zhangsan").name("张三").enabled(true).mobile("13000000001").build(),
User.builder().id(2L).username("lisi").name("李四").enabled(false).mobile("13000000002").build(),
User.builder().id(3L).username("wangwu").name("王五").enabled(true).mobile("13100000000").build(),
};
private List<User> userList;
@BeforeEach
void setup() {
userList = Arrays.asList(arrayOfUsers);
}
@Test
public void forEachStream() {
userList.stream().forEach(user -> user.setEnabled(true));
assertTrue(userList.get(1).isEnabled());
}
}
findFirst
第一个对象
@Test
public void givenUsers_whenMatchUsername_thenFindFirstUsingStream() {
val first = userList.stream().filter(user -> user.getUsername().equals("lisi"))
.findFirst();
assertTrue(first.isPresent());
}
anyMatch
列表存在某个对象匹配
@Test
public void givenUsers_withAnyMatch_thenReturnTrueUsingStream() {
val existed = userList.stream().anyMatch(user -> user.getMobile().startsWith("130"));
assertTrue(existed);
}
allMatch
列表所有对象全部匹配
@Test
public void givenUsers_withAllMatch_thenReturnTrueUsingStream() {
val allMatched = userList.stream().allMatch(user -> user.getMobile().startsWith("130"));
assertTrue(allMatched);
}
map
一种对象转换成另一种对象
@Test
public void givenUsers_withMap_thenTransformUsingStream() {
List<UserDTO> userDTOList = userList.stream().map(user -> UserDTO.builder()
.username(user.getUsername())
.enabled(user.isEnabled() ? "可用" : "不可用").build()).collect(Collectors.toList());
assertEquals(3, userDTOList.size());
}
max/min
排序规则下最大和最小
@Test
public void givenUsers_thenTestOtherTerminalOperatorsUsingStream() {
Optional<User> userMaxUserId = userList.stream().max(Comparator.comparing(User::getId));
assertTrue(userMaxUserId.isPresent());
Optional<User> userMinUserId = userList.stream().min(Comparator.comparing(User::getId));
assertTrue(userMinUserId.isPresent());
}