Java编程新利器:Lambda表达式全解析 第五节

(二)集合操作实战

在 Java 编程中,集合是我们经常使用的数据结构,而 Lambda 表达式为集合操作带来了前所未有的便利,让我们可以用更加简洁、优雅的方式对集合进行遍历、过滤、映射、排序等操作。

1. 集合遍历

在传统的 Java 编程中,我们遍历集合通常使用for循环或foreach循环。例如,遍历一个整数列表并打印每个元素:

TypeScript

取消自动换行复制

import java.util.ArrayList;

import java.util.List;

publicclassMain {

publicstaticvoidmain(String[] args) {

List<Integer> list = newArrayList<>();

list.add(1);

list.add(2);

list.add(3);

list.add(4);

list.add(5);

for (Integer num : list) {

System.out.println(num);

}

}

}

虽然这种方式能够实现遍历功能,但代码略显冗长。而使用 Lambda 表达式结合forEach方法,代码可以简化为:

TypeScript

取消自动换行复制

import java.util.ArrayList;

import java.util.List;

publicclassMain {

publicstaticvoidmain(String[] args) {

List<Integer> list = newArrayList<>();

list.add(1);

list.add(2);

list.add(3);

list.add(4);

list.add(5);

list.forEach(num -> System.out.println(num));

}

}

这里的list.forEach(num -> System.out.println(num))使用 Lambda 表达式定义了对集合中每个元素的操作,即打印元素。Lambda 表达式num -> System.out.println(num)接收一个参数num,并将其打印到控制台。这种写法更加简洁明了,并且能够更好地体现代码的意图。

2. 集合过滤

从集合中筛选出符合特定条件的元素是常见的操作。例如,从一个字符串列表中筛选出所有长度大于 5 的字符串,使用传统方式实现如下:

TypeScript

取消自动换行复制

import java.util.ArrayList;

import java.util.List;

publicclassMain {

publicstaticvoidmain(String[] args) {

List<String> list = newArrayList<>();

list.add("Java");

list.add("Python");

list.add("C++");

list.add("JavaScript");

list.add("Ruby");

List<String> filteredList = newArrayList<>();

for (String str : list) {

if (str.length() > 5) {

filteredList.add(str);

}

}

for (String str : filteredList) {

System.out.println(str);

}

}

}

这段代码使用了两个循环,一个用于筛选元素,一个用于打印筛选后的结果,代码较为繁琐。而使用 Lambda 表达式结合流 (Stream) API,代码可以简化为:

TypeScript

取消自动换行复制

import java.util.ArrayList;

import java.util.List;

import java.util.stream.Collectors;

publicclassMain {

publicstaticvoidmain(String[] args) {

List<String> list = newArrayList<>();

list.add("Java");

list.add("Python");

list.add("C++");

list.add("JavaScript");

list.add("Ruby");

List<String> filteredList = list.stream()

.filter(str -> str.length() > 5)

.collect(Collectors.toList());

filteredList.forEach(System.out::println);

}

}

在这段代码中,list.stream()将集合转换为流,流是一种支持顺序和并行聚合操作的数据源。filter(str -> str.length() > 5)使用 Lambda 表达式筛选出长度大于 5 的字符串,collect(Collectors.toList())将筛选后的结果收集到一个新的列表中。通过这种方式,我们可以用简洁的代码完成复杂的集合过滤操作,提高开发效率。