Java8新特性(stream详解)

以下总结了几条常用的新特性

/*filter过滤(T-> boolean)*/

List newlist = list.stream().filter(user -> user.getAge() > 20) .collect(Collectors.toList());

/*distinct 去重*/

List newlist = list.stream().distinct().collect(Collectors.toList());

/*sorted排序*/

List newlist = list.stream() .sorted(Comparator.comparingInt(User::getAge)).collect(Collectors.toList());

/*limit返回前n个元素*/

List newlist = list.stream() .sorted(Comparator.comparingInt(User::getAge)).limit(2).collect(Collectors.toList());

/*skip去除前n个元素*/

List newlist = list.stream() .sorted(Comparator.comparingInt(User::getAge)).skip(2).collect(Collectors.toList());

/*map(T->R)*/

List newlist = list.stream() .map(User::getName).distinct().collect(Collectors.toList());

/*allMatch(T->boolean)

检测是否全部满足参数行为*/

boolean flag = list.stream().allMatch(user -> user.getAge() >= 10);

/*anyMatch(T->boolean)

检测是否有任意元素满足给定的条件*/

boolean flag = list.stream() .anyMatch(user -> user.getAge() == 10);

/*noneMatchT->boolean)

流中是否有元素匹配给定的 T -> boolean条件*/

boolean flag = list.stream() .noneMatch(user -> user.getName().contains("张三李四"));

/*findFirst( ):找到第一个元素*/

Optional optionalUser = list.stream() .sorted(Comparator.comparingInt(User::getAge)) .findFirst();

/*count()计算总数*/

long count = list.stream().count();

/*最大值最小值*/

Optional max = list.stream() .collect( Collectors.maxBy( Comparator.comparing(User::getAge) ) );

Optional min = list.stream() .collect( Collectors.minBy( Comparator.comparing(User::getAge) ) );

/*求和_平均值*/

int totalAge = list.stream() .collect(Collectors.summingInt(User::getAge));

double avgAge = list.stream() .collect(Collectors.averagingInt(User::getAge));

/*一次性得到元素的个数、总和、最大值、最小值*/

IntSummaryStatistics statistics = list.stream() .collect(Collectors.summarizingInt(User::getAge));

/*拼接*/

String names = list.stream() .map(User::getName) .collect(Collectors.joining(", "));

/*分组*/

Map> map1 = users().stream() .collect(Collectors.groupingBy(User::getName));

Map>> map2 = users().stream() .collect(Collectors.groupingBy(User::getName, Collectors.groupingBy(User::getAge)));

/*分组合计*/

Map num = users().stream() .collect(Collectors.groupingBy(User::getName, Collectors.counting()));

Map num2 = users().stream() .filter(user -> user.getAge() >= 18) .collect(Collectors.groupingBy(User::getName, Collectors.counting()));

/*分区*/

Map> part = list.stream() .collect(Collectors.partitioningBy(user -> user.getAge()

package com.baobei.ademo;

import com.google.gson.Gson;

import java.util.*;
import java.util.stream.Collectors;

/**
 * @author Chenyf
 * @date 2022/3/31 10:59
 */
public class Demo {
    public static void main(String[] args) {
        partitioningBy();
    }

    /*分区*/
    public static void partitioningBy() {
        List<User> list = users();
        Map<Boolean, List<User>> part = list.stream()
                .collect(Collectors.partitioningBy(user -> user.getAge() <= 20));
        System.out.println(new Gson().toJson(part));
    }

    /*分组合计*/
    public static void groupCount() {
        Map<String, Long> num = users().stream()
                .collect(Collectors.groupingBy(User::getName, Collectors.counting()));
        System.out.println(num);


        Map<String, Long> num2 = users().stream()
                .filter(user -> user.getAge() >= 18)
                .collect(Collectors.groupingBy(User::getName, Collectors.counting()));
        System.out.println(num2);
    }

    /*分组*/
    public static void group() {
        Map<Integer, List<User>> map = users().stream()
                .collect(Collectors.groupingBy(User::getAge));
        Map<String, List<User>> map1 = users().stream()
                .collect(Collectors.groupingBy(User::getName));
        System.out.println(new Gson().toJson(map));
        System.out.println();
        System.out.println(new Gson().toJson(map1));
        System.out.println();
        Map<String, Map<Integer, List<User>>> map2 = users().stream()
                .collect(Collectors.groupingBy(User::getName,
                        Collectors.groupingBy(User::getAge)));
        System.out.println(new Gson().toJson(map2));
    }

    /*拼接*/
    public static void join() {
        List<User> list = users();
        String names = list.stream()
                .map(User::getName)
                .collect(Collectors.joining(", "));
        System.out.println(names);
    }

    /*一次性得到元素的个数、总和、最大值、最小值*/
    public static void allVlaue() {
        List<User> list = users();
        IntSummaryStatistics statistics = list.stream()
                .collect(Collectors.summarizingInt(User::getAge));
        System.out.println(statistics);
    }

    /*求和_平均值*/
    public static void sum_avg() {
        List<User> list = users();
        int totalAge = list.stream()
                .collect(Collectors.summingInt(User::getAge));
        System.out.println("totalAge--> " + totalAge);
        double avgAge = list.stream()
                .collect(Collectors.averagingInt(User::getAge));
        System.out.println("avgAge--> " + avgAge);
    }

    /*最大值最小值*/
    public static void max_min() {
        List<User> list = users();
        Optional<User> max = list.stream()
                .collect(
                        Collectors.maxBy(
                                Comparator.comparing(User::getAge)
                        )
                );
        Optional<User> min = list.stream()
                .collect(
                        Collectors.minBy(
                                Comparator.comparing(User::getAge)
                        )
                );
        System.out.println("max--> " + max + "  min--> " + min);
    }

    /*count()计算总数*/
    public static void count() {
        List<User> list = users();
        long count = list.stream().count();
        System.out.println(count);
    }

    /*findFirst( ):找到第一个元素*/
    public static void findfirst() {
        List<User> list = users();
        Optional<User> optionalUser = list.stream()
                .sorted(Comparator.comparingInt(User::getAge))
                .findFirst();
        System.out.println(optionalUser.toString());
    }

    /*noneMatchT->boolean)流中是否有元素匹配给定的 T -> boolean条件*/
    public static void noneMatch() {
        List<User> list = users();
        boolean flag = list.stream()
                .noneMatch(user -> user.getName().contains("张三李四"));
        System.out.println(flag);
    }

    /*anyMatch(T->boolean)检测是否有任意元素满足给定的条件*/
    public static void anyMatch() {
        List<User> list = users();
        boolean flag = list.stream()
                .anyMatch(user -> user.getAge() == 10);
        System.out.println(flag);
    }

    /*allMatch(T->boolean)检测是否全部满足参数行为*/
    public static void allMatch() {
        List<User> list = users();
        boolean flag = list.stream()
                .allMatch(user -> user.getAge() >= 10);
        System.out.println(flag);
    }

    /*flatMap(T -> Stream<R>)*/
    public static void flatmap() {
        List<String> flatmap = new ArrayList<>();
        flatmap.add("常宣灵,常昊灵");
        flatmap.add("孟婆,判官红,判官蓝");
        /*
            这里原集合中的数据由逗号分割,使用split进行拆分后,得到的是Stream<String[]>,
            字符串数组组成的流,要使用flatMap的Arrays::stream
            将Stream<String[]>转为Stream<String>,然后把流相连接
        */
        flatmap = flatmap.stream()
                .map(s -> s.split(","))
                .flatMap(Arrays::stream)
                .collect(Collectors.toList());
        for (String name : flatmap) {
            System.out.println(name);
        }
    }

    /*map(T->R)*/
    public static void map() {
        List<User> list = users();
        List<String> newlist = list.stream()
                .map(User::getName).collect(Collectors.toList());
        for (String add : newlist) {
            System.out.println(add);
        }
    }

    /*skip去除前n个元素*/
    public static void skip() {
        List<User> list = users();
        List<User> newlist = list.stream()
                .sorted(Comparator.comparingInt(User::getAge))
                .skip(2)
                .collect(Collectors.toList());
        for (User user : newlist) {
            System.out.println(user.getName() + " --> " + user.getAge());
        }
    }

    /*limit返回前n个元素*/
    public static void limit() {
        List<User> list = users();
        List<User> newlist = list.stream()
                .sorted(Comparator.comparingInt(User::getAge))
                .limit(2)
                .collect(Collectors.toList());
        for (User user : newlist) {
            System.out.println(user.getName() + " --> " + user.getAge());
        }
    }

    /*sorted排序*/
    public static void sorted() {
        List<User> list = users();
        List<User> newlist = list.stream()
                .sorted(Comparator.comparingInt(User::getAge))
                .collect(Collectors.toList());
        for (User user : newlist) {
            System.out.println(user.getName() + " --> " + user.getAge());
        }
    }

    /*distinct 去重*/
    public static void distinct() {
        List<User> list = users();
        List<User> newlist = list.stream().distinct().collect(Collectors.toList());
        for (User user : newlist) {
            System.out.println(user.getName() + " --> " + user.getAge());
        }
    }

    /*filter过滤(T-> boolean)*/
    public static void filter() {
        List<User> list = users();
        List<User> newlist = list.stream().filter(user -> user.getAge() > 20)
                .collect(Collectors.toList());
        for (User user : newlist) {
            System.out.println(user.getName() + " --> " + user.getAge());
        }
    }

    public static List<User> users() {
        List<User> list = Arrays.asList(
                new User("张三", 20),
                new User("张三", 23),
                new User("张三", 20),
                new User("李四", 10),
                new User("王五", 30)
        );
        return list;
    }
}
package com.baobei.ademo;

import lombok.Data;

import java.math.BigDecimal;

/**
 * @author Chenyf
 * @date 2022/3/31 11:04
 */
@Data
public class User {
    //姓名
    private String name;
    //年龄
    private Integer age;


    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '\'' +
                '}';
    }
}


猜你喜欢

转载自blog.csdn.net/m0_57666466/article/details/123964589