欢迎访问宙启技术站
智能推送

Java函数式编程:Lambda表达式和StreamAPI入门指南

发布时间:2023-06-01 05:50:23

Java 8 中引入了Lambda表达式和StreamAPI,使得Java也可以像函数式编程一样设计和使用代码。Lambda表达式和StreamAPI的引入带来了很大的变革,让我们可以更加方便、简洁和高效地编写Java代码。

Lambda表达式是一种匿名函数,可以像一个普通的变量一样传递和使用。它的语法比较简单,由参数、箭头和函数体三部分组成,如下所示:

(parameter) -> function body

其中,parameter指定了函数的参数,可以是一到多个参数,用逗号隔开。function body指定了函数的实现,可以是一行语句或一段语句块。

为了更好地理解Lambda表达式的用法,我们来看一个示例:

List<String> list = Arrays.asList("Apple", "Banana", "Orange");
list.stream().filter(str -> str.startsWith("A"))
            .forEach(System.out::println);

这段代码就是使用Lambda表达式和StreamAPI来筛选出所有以“A”开头的单词并打印出来。其中,filter()方法用于筛选元素,forEach()方法用于遍历元素并对每个元素执行操作。

StreamAPI是Java 8中新增的用于操作集合和数组的API。它提供了一种流式操作的方式,可以对集合中的元素进行过滤、映射、排序、统计等各种操作。StreamAPI的核心思想是惰性求值,即只有在需要结果时才会进行计算,这样可以避免无用的计算和内存浪费。

除了上面提到的filter()和forEach()方法,StreamAPI还提供了很多其他方法,比如map()、reduce()、sorted()、limit()、distinct()等。这些方法可以按照需求组合使用,实现更加复杂和精细的操作。

下面是一个示例,展示了如何使用StreamAPI来统计一个List中所有小于5的整数的平均值:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
double avg = list.stream().filter(num -> num < 5)
                         .mapToInt(num -> num)
                         .average()
                         .orElse(0.0);
System.out.println(avg);

这段代码使用了filter()方法来筛选小于5的整数,然后使用mapToInt()方法将其转换为整型,接着使用average()方法计算平均值。如果没有符合条件的数字,则使用orElse()方法返回默认值0.0。

Lambda表达式和StreamAPI的引入为Java编程带来了全新的思考方式,使得代码更加简洁、高效和易于维护。理解Lambda表达式和StreamAPI的核心概念和用法,将会有助于我们更好地使用Java进行函数式编程。