Java

来源:互联网 发布:软件开发 书籍 知乎 编辑:程序博客网 时间:2024/05/29 08:22

Lambda 表达式


public void expr1() {/* * 在最简单的形式中,一个lambda可以由用逗号分隔的参数列表、–>符号与函数体三部分表示 */Arrays.asList("a", "b", "c").forEach(e -> System.out.println(e));Arrays.asList(1, 2, 3).forEach((Integer e) -> {e *= 2;System.out.println(e);});}


Java标准库中的java.lang.Runnable和java.util.Comparator都是典型的函数式接口


Comparator 接口 - 函数式排序


public void expr2() {/* * 1. Lambda可能会返回一个值 * 2. 返回值的类型也是由编译器推测出来的 * 3. 如果lambda的函数体只有一行的话,那么没有必要显式使用return语句 */List<Integer> list = Arrays.asList(5, 7, 2, 3); //Lambda表达式“(x, y) -> y - x”实现了java.util.Comparator接口//list.sort((e1, e2) -> e1.compareTo(e2)); // 升序list.sort((e1, e2) -> e2.compareTo(e1)); // 降序System.out.println(list);}


Runnable 接口


import org.junit.Test;public class ThreadUseLambda {/* * 对于函数式接口: * 除了可以使用Java中标准的方法来创建实现对象之外,还可以使用lambda表达式来创建实现对象 * 比如: * Java标准库中的java.lang.Runnable和java.util.Comparator都是典型的函数式接口 */public void sum(int a, int b) {System.out.println(a+b);}@Testpublic void runThreadUseLambda() {// 线程1    new Thread(() -> {        sum(1, 3);    }).start();    // 线程2    new Thread(() -> {    sum(2, 4);    }).start();}}


函数式接口Function


Java SE 8增加了 java.util.function 包,里面都是可以在开发中使用的函数式接口。开发人员也可以创建新的函数式接口。


package redis.practice;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.function.Function;public class CollectionUtils {/* * map 函数: * 参数: input; processor -> Function -> T, 参数; R, 返回值 */    public static  List<String> map(List<String> input, Function<String, String> processor) {        ArrayList<String> result = new ArrayList<String>();        for (String obj : input) {        // Function apply -> 执行函数业务逻辑            result.add(processor.apply(obj));        }        return result;    }    public static void main(String[] args) {        List<String> input = Arrays.asList(new String[] {"apple", "orange", "pear"});        List<String> lengths = CollectionUtils.map(input, (String v) -> String.valueOf(v.length()));        List<String> uppercases = CollectionUtils.map(input, (String v) -> v.toUpperCase());        System.out.println(lengths);        System.out.println(uppercases);    }}


参考博客

官方文档


方法和构造方法引用


List input = Arrays.asList(new String[] {"apple", "orange", "pear"});input.forEach((v) -> System.out.println(v));input.forEach(System.out::println);

List dateValues = Arrays.asList(new Long[] {0L, 1000L});List dates = CollectionUtils.map(dateValues, Date::new);




0 0
原创粉丝点击