暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Java之函数式接口、Lambda表达式、Stream流

IT那活儿 2024-07-01
176

点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!  


  
Java8版本开始支持函数式编程范式,这主要得益于三个核心概念的引入:
  • 函数式接口
  • Lambda表达式
  • Stream流


函数式接口

函数式接口是一种特殊的接口,它只有一个抽象方法。使用@FunctionalInterface注解可以显式地声明一个接口为函数式接口。如果接口不符合函数式接口的定义(即,有多个抽象方法),编译器会报错。
函数式接口通常与Lambda表达式一起使用,作为Lambda表达式的目标类型。Java标准库提供了一些预定义的函数式接口,如Runnable、Callable、Predicate、Function等,同时也允许我们根据需要自定义函数式接口。
示例----自定义一个函数式接口用于打印日志:

@FunctionalInterface
interface LogPrinter {
    void printLog(String message);
}

public class FunctionalInterfaceDemo {
    public static void main(String[] args) {
        LogPrinter printer = message ->System.out.println("Logging: " + message);
        printer.printLog("This is a log message");
    }
}


Lambda表达式

Lambda表达式是Java 8引入的一种简洁表示实例化函数式接口的方式。其基本语法是(参数列表) -> {方法体}。Lambda表达式使得代码更加紧凑,并且提高了可读性。
示例----使用Lambda表达式实现Comparator接口对列表进行排序:

import java.util.Arrays;
import java.util.List;
import java.util.Comparator;

public class LambdaExpressionDemo {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
        //使用Lambda表达式实现Comparator接口对列表进行排序
        names.sort(Comparator.comparing(String::length));
        //打印排序后的列表
        names.forEach(System.out::println);
    }
}


Stream流

Stream API是Java 8中引入的,用于支持函数式风格的数据处理。它允许我们以声明式的方式处理数据集合(如列表、集合等),通过一系列中间操作(如过滤、映射、排序等)构建出数据处理流水线,并通过终端操作得到最终结果。
Stream API提供了丰富的内置方法,能够极大地简化数据处理的复杂度,使得代码更加简洁和易于理解。
示例----使用Stream API过滤出集合中的偶数并计算它们的总和:
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class StreamDemo {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        //使用Stream API过滤出偶数并计算它们的总和
        int sumOfEvens = numbers.stream()
                .filter(n -> n % 2 == 0) //过滤出偶数
                .mapToInt(Integer::intValue) //转换为原始类型流以提高效率
                .sum(); //计算总和
        //打印结果
        System.out.println("Sum of evens: " + sumOfEvens);

        //使用Stream API收集满足条件的元素到新的集合中
        List<Integer> filteredNumbers = numbers.stream()
                .filter(n -> n > 5) //过滤出大于5的数
                .collect(Collectors.toList()); //收集到新的List
        //打印过滤后的集合
        filteredNumbers.forEach(System.out::println);
    }
}

总 结:
函数式接口、Lambda表达式和Stream流是Java 8及以后版本中非常重要的三个特性,它们共同构成了Java函数式编程的基础。
函数式接口定义了Lambda表达式的目标类型,Lambda表达式则提供了一种简洁的实例化函数式接口的方式,而Stream API则允许我们以声明式的方式处理数据集合,极大地简化了数据处理的复杂性。在实际开发中,我们应该充分利用这些特性,结合面向对象编程,写出更加高效、简洁和易于维护的代码

END


本文作者:颜沛东(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论