博主打算从0-1讲解下java进阶篇教学,今天教学第三篇:JDK8中Stream API使用。
Java 8 中的 Stream API 提供了一种便捷、高效的方式来处理集合数据,它支持函数式编程风格的操作,包括过滤、映射、归约等。Stream API 可以大大简化集合的处理代码,使得代码更加清晰和易于理解。下面我将列举 Stream API 中的几个常用方法,并给出相应的代码案例。
一、常用的 Stream API 方法
1.filter()
filter()方法作用:用于过滤集合中的元素,只保留满足条件的元素。
示例代码:
List<String> languages = Arrays.asList("Java", "Python", "C++", "JavaScript"); // 过滤出以 "J" 开头的编程语言 List<String> filteredLanguages = languages.stream() .filter(language -> language.startsWith("J")) .collect(Collectors.toList()); System.out.println(filteredLanguages); // 输出:[Java, JavaScript]
[Java, JavaScript]
2.map()
map()方法 作用:用于对集合中的每个元素进行映射转换。
示例代码:
List<String> languages = Arrays.asList("Java", "Python", "C++", "JavaScript"); // 将所有编程语言转换为大写形式 List<String> upperCaseLanguages = languages.stream() .map(String::toUpperCase) .collect(Collectors.toList()); System.out.println(upperCaseLanguages); // 输出:[JAVA, PYTHON, C++, JAVASCRIPT]
3.collect()
collect()方法作用:将 Stream 元素转换为其他形式,比如 List、Set、Map 等。
示例代码:
List<String> languages = Arrays.asList("Java", "Python", "C++", "JavaScript"); // 将 Stream 转换为 List List<String> languageList = languages.stream() .collect(Collectors.toList());
4.forEach()
forEach()方法作用:对集合中的每个元素执行指定操作。
示例代码:
List<String> languages = Arrays.asList("Java", "Python", "C++", "JavaScript"); // 打印每个编程语言 languages.forEach(System.out::println);
5.count()
count()方法作用:返回 Stream 中的元素个数。
示例代码:
List<String> languages = Arrays.asList("Java", "Python", "C++", "JavaScript"); // 统计编程语言的数量 long count = languages.stream().count(); System.out.println("Number of languages: " + count); // 输出:Number of languages: 4
这里其实你直接用languages.size(); 也可以获取到数量。
6.flatMap()
flatMap()方法作用:将多个 Stream 合并成一个 Stream。
示例代码:
List<List<String>> nestedList = Arrays.asList( Arrays.asList("Java", "Python"), Arrays.asList("C++", "JavaScript") ); // 使用 flatMap 将多个 List 合并为一个 Stream List<String> flatList = nestedList.stream() .flatMap(Collection::stream) .collect(Collectors.toList()); System.out.println(flatList); // 输出:[Java, Python, C++, JavaScript]
7.sorted()
sorted()方法作用:对 Stream 中的元素进行排序。
示例代码:
List<String> languages = Arrays.asList("Java", "Python", "C++", "JavaScript"); // 对编程语言按字母顺序进行排序 List<String> sortedLanguages = languages.stream() .sorted() .collect(Collectors.toList()); System.out.println(sortedLanguages); // 输出:[C++, Java, JavaScript, Python]
8.distinct()
distinct()方法作用:去除 Stream 中重复的元素。
示例代码:
List<String> languages = Arrays.asList("Java", "Python", "Java", "C++", "Python"); // 去除重复的编程语言 List<String> distinctLanguages = languages.stream() .distinct() .collect(Collectors.toList()); System.out.println(distinctLanguages); // 输出:[Java, Python, C++]
9.reduce()
reduce()方法作用:对 Stream 中的元素进行归约操作,得到一个结果。
示例代码:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); // 计算所有数字的和 int sum = numbers.stream() .reduce(0, Integer::sum); System.out.println("Sum of numbers: " + sum); // 输出:Sum of numbers: 15
10.findFirst()
findFirst()方法作用:返回 Stream 中的第一个元素(如果存在)。
示例代码:
List<String> languages = Arrays.asList("Java", "Python", "C++", "JavaScript"); // 找到第一个编程语言 Optional<String> firstLanguage = languages.stream().findFirst(); System.out.println("First language: " + firstLanguage.orElse("None")); // 输出:First language: Java
二、注意事项
- Stream 是一种一次性的数据结构,一旦使用,就不能重复使用。
- Stream 操作默认是惰性的,只有终端操作才会触发实际的计算。
1.list中元素自动拼接成字符串
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class JoiningExample { public static void main(String[] args) { List<String> languages = Arrays.asList("Java", "Python", "C++", "JavaScript"); // 使用 Collectors.joining() 将元素拼接成字符串 String result = languages.stream() .collect(Collectors.joining(", ")); System.out.println(result); // 输出:Java, Python, C++, JavaScript } }
以上是关于 Java 8 中 Stream API 的常用方法及其作用的说明和示例代码。Stream API 提供了一种更加优雅和高效的方式来处理集合数据,能够极大地简化代码,并提高代码的可读性和可维护性。