Java8 stream 使用示例

    技术2025-06-02  19

    stream 使用示例

    import one.util.streamex.StreamEx; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; public class TestStram { public static void main(String[] args) throws IOException { List<User> userList=createUserList(100); //使用List创建流,并使用foreach循环打印出来 userList.stream().forEach(System.out::println); System.out.println("*****************"); //将userList转化为流对象 Stream.of(userList).forEach(System.out::println); System.out.println("*****************"); //创建一个空流 Stream.empty(); //将两个流合并起来 System.out.println("*****************"); List<User> userList2=createUserList(100); List<User> userList3=createUserList(10); //将两个流合并起来 Stream.concat(userList2.stream(),userList3.stream()).forEach(System.out::println); //查找年龄是偶数的user列表 System.out.println("###############"); List<User> userList4=createUserList(100); userList4.stream().filter(user -> user.getAge()%2==0).collect(Collectors.toList()).forEach(System.out::println); //找到年龄为携带奇数的user放到Employee列表中 System.out.println("@@@@@@@@@@@@@@@@@@"); List<User> userList5=createUserList(100); userList5.stream().filter(user ->user.getAge()%2!=0).map(user->{ Employee employee=new Employee(); employee.setEmployeeId(user.getUserId()); employee.setUserName(user.getName()); return employee; }).peek(System.out::println).collect(Collectors.toList()); //将一个多维的列表转化为一个单维的列表,即将,<=30的人一个列表,30>= X<=60为一个列表,60为一个列表 System.out.println("&&&&&&&&&&&&&&&&&&&&&&"); List<User> userList6=createUserList(1,30); List<User> userList7=createUserList(31,60); List<User> userList8=createUserList(61,90); List<List<User>> userList9 = new ArrayList<>(); userList9.add(userList6); userList9.add(userList7); userList9.add(userList8); System.out.println(userList9.toString()); userList9.stream().flatMap(Collection::stream).collect(Collectors.toList()).forEach(System.out::println); System.out.println("+++++++++++++++++++排序++++++++++"); //按照年龄从小到大排序 userList5.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList()).forEach(System.out::println); //按照年龄从大到小的排序 userList5.stream().sorted(Comparator.comparing(User::getAge).reversed()).peek(System.out::println).collect(Collectors.toList()); //将list列表,先按照年龄从大到小排序,相同年龄的按照id从小到大排序 userList5.stream().sorted(Comparator.comparing(User::getAge).reversed()) .sorted(Comparator.comparing(User::getUserId)).collect(Collectors.toList()); System.out.println("----------------统计--------"); //找出最小的年龄的值 int age=userList5.stream().mapToInt(User::getAge).min().orElse(0); //找出年龄最小的那个user对象 User user=userList5.stream().min(Comparator.comparing(User::getAge)).orElse(null); //找出年龄在30岁和50岁之间的列表 userList5.stream().filter(s1->s1.getAge()>=30).filter(s1->s1.getAge()<=50).collect(Collectors.toList()); //找出最大的年龄的值 int maxgae=userList5.stream().mapToInt(User::getAge).max().orElse(0); //找出年龄最大的那个user对象 User maxUser=userList5.stream().max(Comparator.comparing(User::getAge)).orElse(null); //计算出所有的年龄的总和 int sumage=userList5.stream().mapToInt(User::getAge).sum(); //计算出所有年龄的平均值 double avgage=userList5.stream().mapToInt(User::getAge).average().orElse(0); //检查列表中年龄是不是都大于60 boolean havingAll60=userList5.stream().allMatch(user1 -> user1.getAge()>60); //检查列表中的年龄是不是存在60岁的人 boolean havingAny60=userList5.stream().anyMatch(user1 -> user1.getAge()>60); //检查列表中必须没有60岁的才行 boolean havingNo60=userList5.stream().noneMatch(user1 -> user1.getAge()>60); //查找出列表中年龄,所有的年龄都减少10岁 List<Integer> userNewAgeList=userList5.stream().map(user1->user1.getAge()-10).collect(Collectors.toList()); //去掉重复对象 List<User> userList1=userList5.stream().distinct().collect(Collectors.toList()); //年龄60岁的用户只留下一个 List<User> userList10=StreamEx.of(userList5).distinct(user1 -> user1.getAge()>60).toList(); //计算所有人的年龄的总和 int sumage2=userList5.stream().mapToInt(User::getAge).sum(); //另外一种计算所有人的年龄的总和 int sumage3=userList5.stream().map(User::getAge).reduce(Integer::sum).orElse(0); //将列表中的姓名用,分开 String s=userList5.stream().map(User::getName).collect(Collectors.joining(",")); //将查出来的大于60岁的人的姓名写在list<String>中 List<String> nameList=userList5.stream().filter(user1 -> user1.getAge()>60).map(User::getName).collect(Collectors.toList()); //将查出来的大于60岁的人的姓名写在set<User>中 Set<User> userSet=userList5.stream().filter(user1 -> user1.getAge()>60).collect(Collectors.toSet()); //将查出来的大于60岁的人的姓名放在vector<String>中 Vector<String> stringVector = userList5.stream().filter(user1 -> user1.getAge() > 60).map(User::getName).collect(Collectors.toCollection(Vector::new)); //将查出来的大于60岁的人的姓名和年龄放在Map<String,Object> 中 Map<String, Integer> userHa=userList5.stream().filter(user1 -> user1.getAge()>60).collect(Collectors.toMap(User::getName,User::getAge)); //统计列表中大于60岁的人的个数 Long count=userList5.stream().filter(user1 -> user1.getAge()>60).count(); //统计列表中大于60岁的人的个数 LongSummaryStatistics countLongSummaryStatistics=userList5.stream().filter(user1 -> user1.getAge()>60).collect(Collectors.summarizingLong(User::getAge)); System.out.println("countLongSummaryStatistics ==="+countLongSummaryStatistics); System.out.println("countLongSummaryStatistics count ==="+countLongSummaryStatistics.getCount()); LongSummaryStatistics countLongSummaryStatistics2=userList5.stream().filter(user1 -> user1.getAge()>60).mapToLong(User::getAge).summaryStatistics(); DoubleSummaryStatistics cou = userList5.stream().filter(user1 -> user1.getAge()>60).mapToDouble(User::getAge).summaryStatistics(); System.out.println("countLongSummaryStatistics ==="+cou); System.out.println("countLongSummaryStatistics count ==="+cou.getCount()); //将list<User> 按照年龄大于30岁分为两个分区, Map<Boolean, List<User>> userListMap=userList5.stream().collect(Collectors.partitioningBy(user1 -> user1.getAge()>30)); System.out.println("大于30岁的userList"+userListMap.get(true)); System.out.println("小于30岁的userList"+userListMap.get(false)); //按照奇数偶数分组进行分组 Map<Object,List<User>> booleanListMap= userList5.stream().collect(Collectors.groupingBy(user1 -> user1.getAge()%2==0)); System.out.print("按照年龄岁数的奇数偶数分组"+booleanListMap); //启动多个线程计算 Map<Object,List<User>> booleanListMap2=userList5.stream().parallel().collect(Collectors.groupingBy(user1 -> user1.getAge()%2==0)); System.out.print("按照年龄岁数的奇数偶数分组"+booleanListMap2); //启动多个线程计算 userList5.parallelStream().collect(Collectors.groupingBy(user1 -> user1.getAge()%2==0)); //从txt文件中读取用户人员的姓名 Files.lines(Paths.get("E://names.txt")).collect(Collectors.toList()).forEach(System.out::println); //将list列表中找出年龄是奇数的人,并把他的姓名转化为大写 List<String> userList11=userList5.stream().filter(s1->s1.getAge()%2!=0).map(user1->{ return user1.getName().toLowerCase(); }).collect(Collectors.toList()); //假如查询出来的list<User>取出来的值为null,避免流造成异常 User user12=userList5.stream().findFirst().orElse(null); } public static List<User> createUserList(int count){ List<User> userList=new ArrayList<>(); for(int i=1;i<=count;i++){ User user=new User(); user.setAge(i%100); user.setUserId(i); user.setName(i+"name"); userList.add(user); } return userList; } public static List<User> createUserList(int startAge,int endAge){ List<User> userList=new ArrayList<>(); for(int i=startAge;i<=endAge;i++){ User user=new User(); user.setAge(i); user.setUserId(i); user.setName(i+"name"); userList.add(user); } return userList; } }

    User类

    import lombok.Data; @Data public class User { private int userId; private String name; private int age; }

    Employee 类

    import lombok.Data; @Data public class Employee { private int employeeId; private String userName; private int salary; }
    Processed: 0.011, SQL: 9