Java8方法


    /**
     * 比较排序
     */
    @Test
    public void comparing(){
        List<Person> personList = Arrays.asList(new Person("张三",21,70),new Person("李四",22,55),new Person("王五",23,60));
        /**
         * 该方法引用 Employee::getName 可以代替 lambda表达式
         */
        personList.sort(Comparator.comparing(Person::getWeight));
        /**
         * Comparator.comparing 方法的使用
         * comparing 方法接收一个 Function 函数式接口 ,通过一个 lambda 表达式传入
         *
         */
        personList.sort(Comparator.comparing(e -> e.getWeight()));
        System.out.println(personList);
        //输出结果 :[Person(name=李四, age=22, weight=55), Person(name=王五, age=23, weight=60), Person(name=张三, age=21, weight=70)]
        /**
         *  相反的排序规则
         */
        personList.sort(Comparator.comparing(Person::getWeight).reversed());
        System.out.println(personList);
        //输出结果 :[Person(name=张三, age=21, weight=70), Person(name=王五, age=23, weight=60), Person(name=李四, age=22, weight=55)]


        /**
         * null元素排在集合的最前面
         * 当集合中存在null元素时,可以使用针对null友好的比较器,
         * 这里得null 指定是对象是null,而非某一个对象中得值为null
         */
        List<Person> personNullList = Arrays.asList(new Person("张三",21,70),new Person("李四",22,55),new Person("王五",23,60),null);

        Collections.sort(personNullList, Comparator.nullsFirst(Comparator.comparing(Person::getWeight)));

        System.out.println(personNullList);
        //输出结果 : [null, Person(name=李四, age=22, weight=55), Person(name=王五, age=23, weight=60), Person(name=张三, age=21, weight=70)]

        /**
         * null元素排在集合的最后面
         */
        Collections.sort(personNullList, Comparator.nullsLast(Comparator.comparing(Person::getWeight)));
        System.out.println(personNullList);
        //输出结果:[Person(name=李四, age=22, weight=55), Person(name=王五, age=23, weight=60), Person(name=张三, age=21, weight=70), null]

    }

    /**
     * 转换,筛选
     */
    @Test
    public void streamStringList(){
        List<Person> personList = Arrays.asList(
                new Person("张三",21,70),
                new Person("李四",22,80),
                new Person("王五",23,60));

        //查询大于21岁
        List<Person> colorList2 =  personList.stream().filter(t->t.getAge()>21).collect(Collectors.toList());
        System.out.println(colorList2);
        //输出: [Person(name=李四, age=22, weight=80), Person(name=王五, age=23, weight=60)]
        //查询大于21岁,只输出名称
        List<String> colorList1 =  personList.stream().filter(t->t.getAge()>21).map(Person::getName).collect(Collectors.toList());
        System.out.println(colorList1);
        //输出:[李四, 王五]
        //查询大于21岁,并按照weight 排序,只输出名称
        List<String> colorList =  personList.stream().filter(t->t.getAge()>21).sorted(Comparator.comparing(Person::getWeight)).map(Person::getName).collect(Collectors.toList());
        System.out.println(colorList);
        //输出:[王五, 李四]
    }

    /**
     * 匹配
     */
    @Test
    public void streamMatch(){
        //anyMatch
        //流中是否有一个元素能够匹配所给定谓词,只有有一个匹配上就返回 true
        List<Person> personList = Arrays.asList(
                new Person("张三",21,70),
                new Person("李四",23,80),
                new Person("王五",28,60));
        boolean res = personList.stream().anyMatch(t -> t.getAge() > 8);
        System.out.println(res);
        //输出: true

        //allMatch()
        //流中的元素是否都能匹配给定的谓词,所有匹配上才能返回 true
        boolean res1 = personList.stream().allMatch(t -> t.getAge() > 8);
        System.out.println(res1);

        //noneMatch()
        //流中没有任何元素与给定的谓词相匹配,有一个匹配就会返回 false
        boolean res2 = personList.stream().noneMatch(t -> t.getAge() > 8);
        System.out.println(res2);
    }

    /**
     * 查找
     */
    @Test
    public void streamFindAny(){
        //findAny
        //返回当前流中的任意元素
        List<Person> personList = Arrays.asList(
                new Person("张三",21,70),
                new Person("李四",23,80),
                new Person("王五",28,60));
        Optional<Person>  a = personList.stream().filter(t->t.getAge() >23  ).findAny();
        System.out.println(a.get());

        //findFirst
        //返回当前流中的第一个元素
        Optional<Person>  a1 =   personList.stream().filter(t->t.getAge() > 8).findFirst();
        System.out.println(a1.get());

    }

    /**
     * 最大值,最小值
     */
    @Test
    public void streamReduce (){
        //findAny
        //返回当前流中的任意元素
        List<Person> personList = Arrays.asList(
                new Person("张三",21,70),
                new Person("李四",23,80),
                new Person("王五",28,60)
        );

        Optional<Person> max = personList.stream().collect(Collectors.maxBy(Comparator.comparing(Person::getAge)));
        System.out.println(max.get());
        //输出:Person(name=王五, age=28, weight=60)

        Optional<Person> min = personList.stream().collect(Collectors.minBy(Comparator.comparing(Person::getAge)));
        System.out.println(min.get());
        //输出:Person(name=张三, age=21, weight=70)

        //来求和:
        Integer sum = personList.stream().collect(Collectors.summingInt(Person::getAge));
        System.out.println(sum);
        //输出: 72

        //平均数:
        Double avg = personList.stream().collect(Collectors.averagingInt(Person::getAge));
        System.out.println(avg);
        //输出: 24.0

        //用来连接字符串
        String color = personList.stream().map(Person::getName).collect(Collectors.joining(", "));
        System.out.println(color);
        //输出:张三, 李四, 王五

        //分组  求分组总数
        Map<String, Long> longMap = personList.stream().collect(Collectors.groupingBy(Person::getName, Collectors.counting()));
        System.out.println(longMap);

        Map<String, Map<String, List<Person>>> collect = personList.stream().collect(Collectors.groupingBy(Person::getName, Collectors.groupingBy(t -> {
            if (t.getAge() >21) {
                return "LOW_PRICE";
            } else {
                return "HIGHT_PRICE";
            }
        })));
        System.out.println(collect);


        Map<String, Person> f = personList.stream().collect(Collectors.groupingBy(Person::getName, Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparingInt(Person::getAge)), Optional::get)));
        System.out.println(f);


    }

    /**
     * 创建流
     */
    @Test
    public void streamList(){
        //List创建流
        List<String> list = Arrays.asList("hello","world","stream");
        //创建顺序流
        Stream<String> stream = list.stream();
        //创建并行流
        Stream<String> parallelStream = list.parallelStream();

        //数组创建流
        String[] array = {"h", "e", "l", "l", "o"};
        Stream<String> arrayStream = Arrays.stream(array);


        Stream<Integer> stream1 = Stream.of(1, 2, 3, 4, 5, 6);

        Stream<Integer> stream2 = Stream.iterate(0, (x) -> x + 2).limit(3);
        stream2.forEach(System.out::println);

        Stream<Double> stream3 = Stream.generate(Math::random).limit(3);
        stream3.forEach(System.out::println);

    }




    /**
     * Option
     */
    @Test
    public void streamOption (){
        //创建一个空的Optional
        Optional<Person> personOpt = Optional.empty();
        //创建一个非空的Optional
        Optional<Person> personOpt1 = Optional.of( new Person("张三",21,70));
        //Optional 中的 map()方法和流中的map()相似,都是从Optional对象中提取和转换值。
        System.out.println(personOpt1.map(Person::getName).get());
        //创建一个可接受空值的Optional
        Optional<Person> personOpt2 = Optional.ofNullable(null);
        System.out.println(this.getPhoneType( new Person("张三",21,70)));

    }
    //利用null
    private String getPhoneType(Person person) {
        return Optional.ofNullable(person).map(Person::getName).orElse("");
    }


    /**
     * 新的日期和时间
     */
    @Test
    public void streamLocalDate (){
        LocalDate nowDate = LocalDate.now();
        System.out.println(nowDate.toString());
        //输出:2024-02-05
        //创建一个空的Optional
        LocalDate nowDate1 = LocalDate.of(2020,7,18);
        System.out.println(nowDate1.toString());
        //输出:2020-07-18
        int year = nowDate.getYear();                   //2020
        System.out.println(year);

        Month month = nowDate.getMonth();               //07
        System.out.println(month);

        int day = nowDate.getDayOfMonth();              //18
        System.out.println(day);

        DayOfWeek dayOfWeek = nowDate.getDayOfWeek();   //SATURDAY
        System.out.println(dayOfWeek.toString());

        int days = nowDate.lengthOfMonth();             //31

        System.out.println(days);

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨迹嘿嘿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值