java8新特性之stream

/** 总结 java8新特性stream api对集合的各种操作  **/
package com.ldj.java8;


import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;


/**
* @Title: java8新特性之stream总结,类似jquery强大的链式写法
* @author  TODO
* @since   JDK1.6
* @history 2018年6月13日 TODO 新建
*/
public class Stream {


    public static void main(String[] args) {
        List students = new ArrayList();
        Student s1 = new Student(1100820317, "lidajiu", "[email protected]", 11008203, 25);
        Student s2 = new Student(1100820321, "qinge", "[email protected]", 11008203, 24);
        Student s3 = new Student(1100820314, "laijinsheng", "[email protected]", 11008203, 26);
        Student s4 = new Student(1100820412, "huangjian", "[email protected]", 11008204, 20);
        Student s5 = new Student(1100820415, "lizipeng", "[email protected]", 11008204, 17);
        
        students.add(s1);
        students.add(s2);
        students.add(s3);
        students.add(s4);
        students.add(s5);
        
//        groupingBy(students);
//        toMap(students);
//        toMap2(students);
//        toList(students);
//        toSet(students);
//        forEach(students);
//        filter(students);
//        sorted(students);
//        allMatch(students);
//        anyMatch(students);
//        noneMatch(students);
//        count(students);
//        max(students);
//        sum(students);
//        skipAndLimit(students);
//        distinct(students);
        
        
        
    }
    
    /**
     * 分组groupingBy使用
     * @param alist
     */
    public static void groupingBy(List alist) {
        Map> result = alist.stream().collect(Collectors.groupingBy(Student::getCla));
        for(Map.Entry> entry :  result.entrySet()) {
            System.out.println(entry.getKey());
            for(Student s : entry.getValue()) {
                System.out.println(s.getId()+" "+s.getCla());
            }
        }
    }
    
    public static void par(List alist) {
//        alist.stream().collect(Collectors.partitioningBy(s -> s.));
    }
    
    /**
     * 将集合转换成map
     * @param alist
     */
    public static void toMap(List alist) {
        Map result = alist.stream().collect(Collectors.toMap(Student::getId, Student::getName));
        for(Map.Entryentry : result.entrySet()) {
            System.out.println(entry.getKey()+" "+entry.getValue());
        }
    }
    
    public static void toMap2(List alist) {
        Map result = alist.stream().collect(Collectors.toMap(Student::getId, s ->s));
        for(Map.Entry entry : result.entrySet()) {
            System.out.println(entry.getKey()+" "+entry.getValue().getName());
        }
    }
    
    /**
     * 抽取集合中学生的id
     * @param alist
     */
    public static void toList(List alist){
        List ids = alist.stream().map(s -> s.getId()).collect(Collectors.toList());
        for(Integer id : ids) {
            System.out.print(id+" ");
        }
    }
    
    /**
     * toSet使用方法
     * @param alist
     */
    public static void toSet(List alist) {
        Set sets = alist.stream().map(Student::getCla).collect(Collectors.toSet());
        for(Integer i : sets) {
            System.out.print(i+" ");
        }
    }
    
    /**
     * forEach操作
     * @param alist
     */
    public static void forEach(List alist) {
        alist.stream().forEach(s ->System.out.println(s.getName()));
    }
    
    /**
     * filter
     * @param alist
     */
    public static void filter(List alist) {
        List result = alist.stream().filter(s -> (s.getAge() > 18 && s.getAge() < 26)).collect(Collectors.toList());
        for(Student s : result) {
            System.out.println(s.getName()+" "+s.getAge());
        }
    }
    
    /**
     * sorted操作 (排序后原数据源alist是不会被修改的)
     * @param alist
     */
    public static void sorted(List alist) {
        List result = alist.stream().sorted((p1, p2) -> p1.getAge() - p2.getAge() ).collect(Collectors.toList());
        for(Student s : result){
            System.out.println(s.getName()+" "+s.getAge());
        }
    }
    
    /**
     * allMatch所有都匹配成功就返回true, 否则返回false
     * @param alist
     */
    public static void allMatch(List alist) {
        boolean result  = alist.stream().allMatch(s -> s.getAge() > 18);
        System.out.println(result);
    }
    
    /**
     * anyMatch  只要有一个匹配多久返回true,否则返回false
     * @param alist
     */
    public static void anyMatch(List alist) {
        boolean result = alist.stream().anyMatch(s -> s.getAge() > 18);
        System.out.println(result);
    }
    
    /**
     * noneMatch 没有一个匹配就返回true, 否则返回false
     * @param alist
     */
    public static void noneMatch(List alist) {
        boolean result = alist.stream().noneMatch(s -> s.getAge() > 18);
        System.out.println(result);
    }
    
    /**
     * 计数操作,计算年龄小于18的人的个数
     * @param alist
     */
    public static void count(List alist) {
        long count = alist.stream().filter(s -> s.getAge() < 18).count();
        System.out.println(count);
    }
    
    /**
     * 查找出最大的年龄
     * @param alist
     */
    public static void max(List alist) {
        int maxAge = alist.stream().mapToInt(s -> s.getAge()).max().getAsInt();
        System.out.println(maxAge);
    }
    
    /**
     * sum求和
     * @param alist
     */
    public static void sum(List alist) {
        int sum = alist.stream().filter(s -> s.getAge() > 18 ).mapToInt(s -> s.getAge()).sum();
        System.out.println(sum);
    }
    
    /**
     * limit 返回 Stream 的前面 n 个元素;skip 则是跳过前 n 个元素只要后面的元素 
     * @param alist
     */
    public static void skipAndLimit(List alist) {
        List result = alist.stream().skip(1).limit(2).collect(Collectors.toList());
        for(Student s : result) {
            System.out.println(s.getName());
        }
    }
    
    /**
     * distinct
     * @param alist
     */
    public static void distinct(List alist) {
        List result = alist.stream().map(s -> s.getAge()).distinct().collect(Collectors.toList());
        for(Integer i : result) {
            System.out.println(i);
        }
    }
    
    
    


}

你可能感兴趣的:(it技术)