Java中的stream()流是一种新的API,它提供了一种高效且易于理解的方式来处理数据。
stream()流可以从集合、数组或I/O通道创建。一旦创建,stream()流就可以使用各种操作进行转换和过滤,最后收集到一个结果集合中。
下面是使用stream()流的例子:
package com.dy.revise;
import com.dy.domain.User;
import java.util.*;
import java.util.stream.Collectors;
public class ListStream {
public static void main(String[] args) {
List<User> userList = getUserList();
test(userList);
}
public static List<User> getUserList() {
List<User> userList = new ArrayList<>();
userList.add(new User(1, "Jack", 18));
userList.add(new User(2, "Jane", 17));
userList.add(new User(3, "Tao", 16));
userList.add(new User(4, "Geng", 13));
userList.add(new User(5, "Shun", 66));
return userList;
}
public static void test(List<User> userList) {
// 遍历
userList.forEach(e -> System.out.println("测试 test ===>>>" + e.toString()));
// 过滤
List<User> filterUsers = userList.stream().filter(user -> user.getAge() >= 18).collect(Collectors.toList());
System.out.println("过滤用户: " + filterUsers);
// 获取目标用户名称--map重组(先过滤再获取姓名集合)
List<String> userNameList = userList.stream().filter(e -> e.getId() >= 3).map(User::getUserName).collect(Collectors.toList());
System.out.println("获取用户名: " + userNameList);
// 按照年龄递增
List<User> sortUserList = userList.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(Collectors.toList());
System.out.println("排序用户:" + sortUserList);
Collections.reverse(sortUserList);
System.out.println("排序-翻转用户: " + sortUserList);
// 年龄最大的用户
Optional<User> max = userList.stream().max(Comparator.comparing(User::getAge));
if (max.isPresent()) {
User maxAgeUser = max.get();
System.out.println("年龄最大的用户: " + maxAgeUser);
}
// 根据ID转map,map的key为id
Map<Integer, User> mapUser = userList.stream().collect(Collectors.toMap(User::getId, userItem -> userItem));
System.out.println("list转map: " + mapUser);
// 以ID分组
Map<Integer, List<User>> mapUserList = userList.stream().collect(Collectors.groupingBy(User::getId));
System.out.println("使用用户ID分组:" + mapUserList);
}
}