java中Lambda常用场景

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;

public class TestLambda {
    private final String NIHAO = "nihao";

    /**
     * lambda表达式的常用场景
     */
    @Test
    public void test() {
        List<String> listOne = new ArrayList<>();
        listOne.add("NIKE");
        listOne.add("Addidas");
        /**
         * 用在匿名内部类里简写 ()->
         */
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("do nothing");
            }
        }).start();
        new Thread(() -> System.out.println("do nothing")).start();

        //用在集合比较器里
        Collections.sort(listOne, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.compareTo(o2);
            }
        });

        listOne.sort((o1, o2) -> o1.compareTo(o2));//正序
        listOne.sort((o1, o2) -> -o1.compareTo(o2));//逆序

        //用在遍历集合 或操作集合中元素的时候
        listOne.forEach(System.out::println);
        List result = new ArrayList();
        listOne.stream().forEach(item -> result.add(item));


        System.out.println("--boundary--");

        //通过自定义filter方法 或者 集合.stream().filter(Predicate<>)
        filter(listOne, n -> n.startsWith("N"));
        filter(listOne, n -> true);
        filter(listOne, n -> false);
        filter(listOne, n -> n.length() > 5);

        Predicate<String> predicate = n -> n.startsWith("N");
        listOne.stream().filter(predicate).forEach(System.out::print);
        List<Integer> list3 = new ArrayList<>();
        list3.add(10);
        list3.add(8);
        list3.add(3);
        list3.add(15);
        list3.add(20);
        Predicate<Integer> predicate1 = n -> Integer.valueOf(n) > 10;

        //直接new Predicate<>(){} 然后重写它的一个返回值为boolean的方法 代表如果为true则保留
        List<String> list = new ArrayList<>();
        list.add(NIHAO);
        list.add(NIHAO);
        list.add(NIHAO);
        list.add(NIHAO);
        list.add("wohaixing");
        List<String> strings = list.stream().filter((String s) ->
                s.equals(NIHAO)).collect(Collectors.toList());
        System.out.println(strings);

        //用于map reduce中 此处先filter删选数据 然后执行map操作
        Double aDouble = list3.stream().filter(predicate1).map(vo -> vo * .12 + vo).reduce((sum, vo) -> sum + vo).get();
        System.out.println(aDouble);

        //stream()之后可以通过distinct()去重 也可以通过stream().collect(Collectors.toSet())去重
        //Collector.joining(delimiter)通过定界符连接成字符串
        List<String> list4 = new ArrayList<>();
        list4.add("Hello");
        list4.add("Boy");
        list4.add("How");
        list4.add("Are");
        list4.add("You");
        list4.add("You");
        list4.stream().distinct().collect(Collectors.toList()).forEach(System.out::print);
        System.out.println(list4.stream().map(x -> x.toUpperCase()).collect(Collectors.joining(", ")));

        /**
         * 通过mapTOInt() mapToDouble() mapToLong() 然后summarStatistics() 可以获得 IntSummaryStatistics 这个类的实例
         * 然后调用它的getSum() getAverage() getCount() getMax() getMin()方法
         */
        List<Integer> list5 = Arrays.asList(1, 3, 4, 5, 6, 7, 10, 23);
        IntSummaryStatistics intSummaryStatistics = list5.stream().mapToInt(x -> x).summaryStatistics();
        System.out.println(intSummaryStatistics.getSum());
        System.out.println(intSummaryStatistics.getAverage());
        System.out.println(intSummaryStatistics.getCount());
        System.out.println(intSummaryStatistics.getMax());
        System.out.println(intSummaryStatistics.getMin());
    }

    public void filter(List<String> names, Predicate<String> condition) {
        names.stream().filter(name -> condition.test(name)).forEach(vo -> System.out.print(vo + " "));
        System.out.println();
    }
}

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值