美文网首页
lambda表达式及Stream操作

lambda表达式及Stream操作

作者: 麦大大吃不胖 | 来源:发表于2020-12-22 09:24 被阅读0次

by shihang.mai

1. lambda表达式特点

  • 函数式编程

  • 参数类型自动推断

  • 代码量少,简洁

可以用在任何有函数式接口的地方

2. jdk提供的函数式接口

接口 方法 作用
Supplier<T> T get(); 没输入,1个输出
Consumer<T> void accept(T t) 1个输入,没输出
BiConsumer<T, U> void accept(T t, U u) 2个输入,没输出
Function<T, R> R apply(T t) 1个输入,1个输出,输入输出不同类型
UnaryOperator<T> T apply(T t) 1个输入,1个输出,输入输出相同类型
BiFunction<T, U, R> R apply(T t, U u) 2个输入,1个输出,3个都不同类型
BinaryOperator<T> T apply(T t, T t) 2个输入,1个输出,3个都相同类型

3. Lambda使用

只有一个抽象方法的接口就是函数式接口,一般地在函数式接口上加上注解@FunctionInterface

@FunctionInterface
public interface IUser {
  void add()
}
public class Test{
    public static void main(String[] args) {
        /**
          * ()指方法中有没参数,当超过一句代码时,要用中括号,如
          *   IUser user = () ->{System.out.println("....");};
          */
        IUser user = () ->System.out.println("....");
    }
}

3.1 方法引用

类型 语法
静态方法引用 类名::staticMethod
实例方法引用 ins::insMethod
对象方法引用 类名::insMethod
构造方法引用 类名::new

3.2 Stream

3.2.1 source

  1. 数组
public static void main(String[] args) {
        String [] arr= {"m","s","h"};
        Stream<String> arrStream = Stream.of(arr);
}
  1. 集合
public static void main(String[] args) {
        List<String> list = Arrays.asList("m", "s", "h");
        Stream<String> listStream = list.stream();
}
  1. Stream.generate()
public static void main(String[] args) {
        Stream<Integer> generate = Stream.generate(() -> 123);
}
  1. Stream.iterate
public static void main(String[] args) {
        Stream<Integer> iterate = Stream.iterate(1, (x) -> x + 1);
}
  1. other
public static void main(String[] args) {
        String str = "msh";
        IntStream chars = str.chars();
}
public static void main(String[] args) {
        Stream.of(1,2,3,4,5,6);
}

3.2.3 middle

  1. filter
public static void main(String[] args) {
        List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5,6);
        Stream<Integer> stream = integers.stream();
        stream.filter((x) -> x % 2 == 0);
}
  1. mapToInt
public static void main(String[] args) {
        List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5,6);
        Stream<Integer> stream = integers.stream();
        int sum = stream.filter((x) -> x % 2 == 0).mapToInt((x) -> x).sum();
        System.out.println(sum);
}

limit
skip
distinct
sorted

3.2.4 end

  1. sum
public static void main(String[] args) {
        List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5,6);
        Stream<Integer> stream = integers.stream();
        int sum = stream.filter((x) -> x % 2 == 0).mapToInt((x) -> x).sum();
        System.out.println(sum);
}
  1. max
public static void main(String[] args) {
        List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5,6);
        Stream<Integer> stream = integers.stream();
        Optional<Integer> max = stream.filter((x) -> x % 2 == 0).max((a, b) -> a - b);
        System.out.println(max.get());
}
  1. min
public static void main(String[] args) {
        List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5,6);
        Stream<Integer> stream = integers.stream();
        Optional<Integer> min = stream.filter((x) -> x % 2 == 0).min((a, b) -> a - b);
        System.out.println(min.get());
}
  1. findAny
  2. findFirst
  3. collect
  4. allMatch
  5. anyMatch
  6. noneMatch
  7. count
  8. forEach
  9. reduce

相关文章

网友评论

      本文标题:lambda表达式及Stream操作

      本文链接:https://www.haomeiwen.com/subject/cvixwktx.html