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

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