JAVA-Lambda

Lambda

Reference

Why

函数式编程,简化写法。可以看作匿名类的简化写法

What

Lambda:可以被认为是一种匿名函数,可以看做从匿名类一步步演化而来。

How

结构:(int a, int b) -> { return a + b; }

  • 参数类型:一个或者多个参数
  • 主体: 一条或者多条语句

线程

//旧方法:
new Thread(new Runnable() {
@Override
public void run() {
    System.out.println("Hello from thread");
}
}).start();

//新方法:
new Thread(
() -> System.out.println("Hello from thread")
).start();

事件处理

  //Old way:
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
    System.out.println("The button was clicked using old fashion code!");
}
});

//New way:
button.addActionListener( (e) -> {
    System.out.println("The button was clicked. From Lambda expressions !");
});

常规方法

//Old way:
List list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
for(Integer n: list) {
   System.out.println(n);
}

//New way:
List list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
list.forEach(n -> System.out.println(n));


//or we can use :: double colon operator in Java 8
list.forEach(System.out::println);

Stream + Lambda

//Old way:
List list = Arrays.asList(1,2,3,4,5,6,7);
for(Integer n : list) {
    int x = n * n;
    System.out.println(x);
}

//New way:
List list = Arrays.asList(1,2,3,4,5,6,7);
list.stream().map((x) -> x*x).forEach(System.out::println);

实际使用

Optional chromeFooter = readerSDK.getRegistry().getChromeFooterProviders().stream()
        .filter(Objects::nonNull)
        .map(provider -> provider.getChromeFooter(readerSessionContext))
        .filter(Objects::nonNull)
        .filter(IReaderItem::isEnabled)
        .max(Comparator.comparingInt(IReaderItem::getPriority));

你可能感兴趣的:(技术,lambda)