java8 新特性 stream 之 筛选,过滤,去重,排序

    /**
     * 筛选操作
     * filter  从流中排出某些元素
     * limit   使元素不超过指定数量,超过则跳出流
     * skip(N)    跳过N个指定元素,返回其他元素
     * distinct 筛选,通过hashCode()和equals 去除重复元素
     */

    List<User> list = Arrays.asList(
            new User("刘备", 45, "33231", "2020-1-01"),
            new User("关羽", 40, "12112", "2020-2-01"),
            new User("张飞", 38, "33333", "2020-3-01"),
            new User("曹操", 45, "44444", "2020-11-01"),
            new User("张辽", 35, "55555", "2020-12-01"),
            new User("徐晃", 37, "77777", "2020-08-01"),
            new User("徐晃", 37, "77777", "2020-08-01"),
            new User("徐晃", 37, "77777", "2020-08-01"),
            new User("徐晃", 37, "77777", "2020-08-01")
    );

    //选出年龄大于35岁的
    @Test
    void filter() {
        List<User> collect = list.stream()
                //选出年龄大于35岁的
                .filter((e) -> e.getAge() > 35)
                //转换成list集合
                .collect(Collectors.toList());
        //循环打印
        collect.stream().forEach(
                System.out::println
        );
    }

    //只要前2个年龄超过35岁的
    @Test
    void fileter1() {
        List<User> collect = list.stream()
                //选出年龄大于35岁的
                .filter((e) -> e.getAge() > 35)
                //只要前2个
                .limit(2)
                .collect(Collectors.toList());

        //循环打印
        collect.stream().forEach(
                System.out::println
        );
    }

    //剔除前2个年龄大于35岁的,返回其他大于35岁的 (很少用)
    @Test
    void fileter2() {
        List<User> collect = list.stream()
                //选出年龄大于35岁的
                .filter((e) -> e.getAge() > 35)
                //不要这2个
                .skip(2)
                .collect(Collectors.toList());

        //循环打印
        collect.stream().forEach(
                System.out::println
        );
    }

    //根据hashCode 和 equels 去重
    // 注意: hashCode 和 equels 有哪些元素就根据哪些元素去重 如只有name ,就根据name去重
    @Test
    void fileter3() {
        List<User> collect = list.stream()
                //选出年龄大于35岁的
                .filter((e) -> e.getAge() > 35)
                //根据 hashCode 和equls 去除重复的
                .distinct()
                .collect(Collectors.toList());

        //循环打印
        collect.stream().forEach(
                System.out::println
        );
    }
 @Test
    void sorted1() {
        //按年龄排序
        List<User> collect = list.stream()
                .sorted((e1, e2) -> {
                    //先按年龄排序
                    return e1.getAge().compareTo(e2.getAge());
                })
                .collect(Collectors.toList());
        //循环打印
        collect.stream().forEach(
                System.out::println
        );
    }

    @Test
    void sorted2() {
        //先按年龄排序
        //年龄一样 按 姓名排序
        List<User> collect = list.stream()
                .sorted((e1, e2) -> {
                    if (e1.getAge().equals(e2.getAge())) {
                        return e1.getName().compareTo(e2.getName());

                    } else {
                        return e1.getAge().compareTo(e2.getAge());
                    }
                })
                .collect(Collectors.toList());
        //循环打印
        collect.stream().forEach(
                System.out::println
        );
    }
//因时间是string 且 有 2020-1-1 非标准格式 顾转换为标准格式后进行排序
  /**
     *  DateTime  是hutool  工具类
     *   <dependency>
     *             <groupId>cn.hutool</groupId>
     *             <artifactId>hutool-all</artifactId>
     *             <version>5.5.9</version>
     *   </dependency>
     */
    @Test
    void sorted3() {
        DateTime dateTime = new DateTime("2020-1-01","yyyy-MM-dd");
        System.out.println(dateTime);

        //按时间排序
        List<User> collect = list.stream()
                .sorted((e1, e2) -> {
                    return new DateTime(e1.getDate(),"yyyy-MM-dd").compareTo(new DateTime(e2.getDate(),"yyyy-MM-dd"));
                })
                .collect(Collectors.toList());
        //循环打印
        collect.stream().forEach(
                System.out::println
        );
    }
import lombok.Data;

import java.util.Objects;

@Data
public class User {


    String name;

    Integer age;

    String money;

    String date;

    public User() {
    }

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

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return Objects.equals(age, user.age);
    }

    @Override
    public int hashCode() {
        return Objects.hash(age);
    }
}
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页