Java8 stream 使用示例

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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章