lambda表达式

lambda表达式,第1张

lambda表达式 函数式接口
@FunctionalInterface
public interface MathOperation {

    int operation(int a, int b);

    static int sum(int a, int b) {
        return a + b;
    }
}

可以这样写:

MathOperation operation = (a, b) -> a + b;
operation.operation(2, 3);
方法引用::

以上是两数相加,其实MathOperation已经有sum函数,又可以写为:

MathOperation operation = (a, b) -> MathOperation.sum(a, b);

用 :: 可以简化为:

MathOperation operation = MathOperation::sum;
forEach
List letters = Arrays.asList("a", "b", "c");
        for (String letter : letters) {
            System.out.println(letter);
        }

可以这样写:

List letters = Arrays.asList("a", "b", "c");
        letters.forEach(n -> System.out.println(n));
        // 使用方法引用::简化为:
        letters.forEach(System.out::println);
Predicate
List letters = Arrays.asList("a", "ab", "c");
        filter(letters, n -> n.startsWith("a"));
        
public void filter(List letters, Predicate condition) {
        letters.forEach(letter -> {
            if (condition.test(letter)) {
                System.out.println(letter + ".");
            }
        });
    }

可以使用stream API简化,filter参数也是Predicate:

letters.stream().filter(n -> n.startsWith("a")).forEach(n -> System.out.println(n + "."));

Predicate 有 and、or等default方法:

Predicate predicate = n -> n.startsWith("a");
        letters.stream().filter(predicate.and(n -> n.length() == 2))
                .forEach(n -> System.out.println(n + "."));
Map
List letters = Arrays.asList("a", "ab", "c");
        letters.stream().map((String letter) -> letter + ".").forEach(System.out::println);
reduce()
List letters = Arrays.asList("a", "ab", "c");
        String s = letters.stream().map((String letter) -> letter + ".")
                .reduce((append, letter) -> append + letter).get();
        System.out.println(s);
collect()
List letters = Arrays.asList("ab", "ab", "c");
        List list = letters.stream().filter(letter -> letter.contains("a"))
                .map(String::toUpperCase)
                .filter(letter -> letter.contains("A"))
                .distinct()
                .collect(Collectors.toList());
        
summaryStatistics
List letters = Arrays.asList("1", "2", "3");
        IntSummaryStatistics statistics = letters.stream().mapToInt(Integer::parseInt).summaryStatistics();
        int min = statistics.getMin();
        int max = statistics.getMax();
        long sum = statistics.getSum();
        double average = statistics.getAverage();
        long count = statistics.getCount();

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5696792.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-17
下一篇2022-12-17

发表评论

登录后才能评论

评论列表(0条)

    保存