本文共 2284 字,大约阅读时间需要 7 分钟。
Lambda表达式是一种匿名函数,在Java中被称为闭包。它的语法分为两种风格:表达式风格和块风格。
(parameters) -> expression
表达式风格的Lambda表达式直接由一个表达式组成,适合简单的操作。
(parameters) -> { statements; } 块风格的Lambda表达式由花括号包裹的代码块组成,适合复杂的逻辑操作。
Lambda表达式可以看作匿名内部类的实现,但它只能用于函数式接口。函数式接口是指只定义一个抽象方法的接口。
public interface Comparator{ int compare(T o1, T o2);}
Lambda表达式示例:
Comparatorcomparator = (a, b) -> a - b;
public interface Runnable { void run();} Lambda表达式示例:
Runnable runnable = () -> System.out.println("Hello World"); public interface Callable{ V call() throws Exception;}
Lambda表达式示例:
Callablecallable = () -> "Hello World";
表示一个布尔表达式。
public interface Predicate{ boolean test(T t);}
Lambda表达式示例:
Predicatepredicate = s -> s.length() == 5;
表示对某个对象执行操作。
public interface Consumer{ void accept(T t);}
Lambda表达式示例:
Consumerconsumer = s -> System.out.println(s);
表示生成一个对象。
public interface Supplier{ T get();}
Lambda表达式示例:
Suppliersupplier = () -> "Hello";
表示将一个对象转换为另一个对象。
public interface Function{ R apply(T t);}
Lambda表达式示例:
Functionfunction = s -> s.length();
方法引用是一种更简洁的Lambda表达式写法,形式为 目标引用::方法名称。
Functionfunction = Integer::parseInt;
Functionfunction = String::length;
String s = "Hello";Functionfunction = s::length;
Listapples = Arrays.asList(new Apple("红色", 50), new Apple("红色", 100), new Apple("绿色", 100));apples.sort(Comparator.comparing(Apple::getWeight).reversed());
PredicateheavyAndRed = heavyApple.and(redApple);
Functionf = x -> x + 1;Function g = x -> x * 2;Function h = f.andThen(g);int result = h.apply(1); // 4
方法引用可以与Lambda表达式结合使用,实现更简洁的代码。
Functionfunction = s -> s.length();// 可以改写为Function function = String::length;
Comparator.comparing(FunctionkeyExtractor)
Predicate.not(Predicatepredicate)
通过这些工具类,可以轻松构建复杂的函数式逻辑。
转载地址:http://fdqfk.baihongyu.com/