Lambda入门

函数编程演化历程

1、将业务逻辑直接写死在代码里
2、将单一维度的条件作为参数传入方法中。方法内根据参数进行业务逻辑实现
3、将多个维度的条件作为参数传入方法中。业务实现根据不同的参数处理不同的逻辑
4、将业务逻辑封装为一个实体类,方法接受实体类为参数,方法内部调用实体类的处理逻辑
5、调用方法时不再创建实体类,而是使用匿名函数的形式替代
6、使用Lambda表达式替代匿名函数的形式,作为方法的参数。真正实现判断逻辑参数化传递

lambda :
(params) -> expression
(params) -> {statement;}

在这里插入图片描述
在这里插入图片描述

/**
     * 过滤不符合断言判断的数据
     */
    public void filterTest() {
        list.stream().filter(sku -> "sku1".equals(sku.getCategory()))
                .forEach(sku -> System.out.println(sku.getCategory()));
    }

    /**
     * 将一个元素转换成另一个元素
     */
    public void mapTest() {
        list.stream()
                .map(sku -> sku.getPrice())
                .forEach(price -> System.out.println(price));
    }

    /**
     * 将一个对象转换成一个流
     */
    public void flatMapTest() {
        list.stream()
                .map(sku -> Arrays.stream(sku.getName().split("")))
                .forEach(name -> System.out.println(name));
    }

    /**
     * 对流进行遍历操作 不会销毁
     */
    public void peek() {
        list.stream()
                .peek(sku -> System.out.println(sku.getName()))
                .forEach(sku -> System.out.println(sku.getName()));
    }

    /**
     * 排序
     */
    public void sortTest() {
        list.stream()
                .peek(sku -> System.out.println(sku.getName()))
                .sorted(Comparator.comparing(Sku::getPrice).reversed())
                .forEach(sku -> System.out.println(sku.getName()));
    }

    /**
     * 去重
     */
    public void distinctTest() {
        list.stream()
                .map(sku -> sku.getCategory())
                .distinct()
                .forEach(item -> System.out.println(item));
    }

    /**
     * 跳过
     */
    public void skipTest() {
        list.stream()
                .peek(sku -> System.out.println(sku.getName()))
                .sorted(Comparator.comparing(Sku::getPrice).reversed())
                .skip(3)
                .forEach(sku -> System.out.println(sku.getName()));
    }

    /**
     * 限制
     */
    public void limitTest() {
        list.stream()
                .peek(sku -> System.out.println(sku.getName()))
                .sorted(Comparator.comparing(Sku::getPrice).reversed())
                .limit(3)
                .forEach(sku -> System.out.println(sku.getName()));
    }

    /**
     * 全部匹配
     */
    public void allMatchTest() {
        boolean match = list.stream().allMatch(sku -> sku.getPrice() > 100);
        System.out.println(match);
    }

    /**
     * 部分满足
     */
    public void anyMatchTest() {
        boolean match = list.stream().anyMatch(sku -> sku.getPrice() > 100);
        System.out.println(match);
    }

    /**
     * 都不匹配
     */
    public void noneMatchTest() {
        boolean match = list.stream().noneMatch(sku -> sku.getPrice() > 100);
        System.out.println(match);
    }

    /**
     * 找到第一个元素
     */
    public void findFirstTest() {
        Optional<Sku> optional = list.stream().findFirst();
        System.out.println(optional.get());
    }

    /**
     * 找到任何一个
     */
    public void findAnyTest() {
        Optional<Sku> optional = list.stream().findAny();
        System.out.println(optional.get());
    }

    /**
     * 最大值
     */
    public void maxTest() {
        OptionalDouble optionalDouble = list.stream().mapToDouble(Sku::getPrice).max();
        System.out.println(optionalDouble.getAsDouble());
    }

    /**
     * 数量
     */
    public void countTest() {
        long count = list.stream().count();
        System.out.println(count);
    }
/**
     * 由数值直接构建流
     */
    public void streamFromValue() {
        Stream<Integer> stream = Stream.of(1, 2, 3);
        stream.forEach(System.out::println);
    }

    /**
     * 通过数组构建流
     */
    public void streamFromArray() {
        int[] number = {1, 2, 3};
        IntStream stream = Arrays.stream(number);
        stream.forEach(System.out::println);
    }

    /**
     * 通过文件构建流
     * @throws IOException
     */
    public void streamFromFile() throws IOException {
        Stream<String> stream = Files.lines(Paths.get(""));
        stream.forEach(System.out::println);
    }

    /**
     * 通过函数生成流
     */
    public void streamFromFunction() {
        Stream<Integer> stream1 = Stream.iterate(0, n -> n + 1);
        stream1.limit(50).forEach(System.out::println);
        Stream<Double> stream = Stream.generate(Math::random);
        stream.limit(50).forEach(System.out::println);
    }
/**
     * 集合收集器
     */
    public void toList() {
        List<Sku> cartList = CartService.getCartList();
        List<Sku> collect = cartList.stream().filter(sku -> sku.getPrice() > 1000)
                .collect(Collectors.toList());
        System.out.println(collect);
    }

    /**
     * 分组
     */
    public void group() {
        List<Sku> cartList = CartService.getCartList();
        // Map<分组条件, 结果集合>
        Map<String, List<Sku>> collect = cartList.stream().collect(
                Collectors.groupingBy(sku -> sku.getCategory())
        );
        System.out.println(collect);
    }

    /**
     * 分区
     */
    public void partition() {
        List<Sku> cartList = CartService.getCartList();
        Map<Boolean, List<Sku>> collect = cartList.stream().collect(Collectors.partitioningBy(sku -> sku.getPrice() > 100));

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值