一、介绍
Java Stream API是Java8中最具有革命性的特性之一,它提供了一个非常方便的机制来处理数据。Java Stream API是对集合和数组进行过滤、映射和归约等操作的高级工具,极大地方便了数据处理。Stream使Java中的集合操作高效而简洁,使得开发人员可以专注于业务逻辑。本文将为你介绍Java Stream API的基本操作和高级用法。
二、Java Stream API基本操作
1.创建Stream
Java Stream API可以从一个集合或数组中创建,也可以从文件、I/O通道、生成器等中创建。根据源数据不同,创建Stream的方法不同。
import java.util.List; import java.util.Arrays; import java.util.stream.Stream; public class StreamDemo { public static void main(String[] args) { //使用Stream.of()方法创建Stream Stream<String> stream1 = Stream.of("A", "B", "C"); stream1.forEach(System.out::print); //使用Arrays.stream()方法创建Stream String[] arr = { "A", "B", "C" }; Stream<String> stream2 = Arrays.stream(arr); stream2.forEach(System.out::print); //创建一个空的Stream Stream<String> stream3 = Stream.empty(); //根据集合创建Stream List<String> list = Arrays.asList("A", "B", "C"); Stream<String> stream4 = list.stream(); } }
2.过滤与映射
Stream还提供了过滤和映射操作,可以很方便地对Stream中的元素进行筛选和转换。
import java.util.Arrays; import java.util.stream.Stream; public class StreamDemo2 { public static void main(String[] args) { String[] arr = { "Java", "Python", "C++", "C#" }; Stream<String> stream = Arrays.stream(arr). filter(x -> x.endsWith("a")). map(String::toUpperCase); stream.forEach(System.out::println); } }
3.归约操作
归约操作是将所有元素合并为一个单一结果的操作。Stream提供了reduce()方法,可以将Stream中的元素归约为一个结果。
import java.util.stream.Stream; public class StreamDemo3 { public static void main(String[] args) { Integer[] arr = { 1, 2, 3, 4, 5 }; Integer sum = Stream.of(arr). reduce(0, Integer::sum); System.out.println(sum); } }
三、Java Stream API高级用法
1.并行 Stream
Stream提供了parallel()方法,可以将Stream转换为并行Stream。并行Stream可以加速处理过程,提高程序效率。
import java.util.stream.Stream; public class StreamDemo4 { public static void main(String[] args) { Integer[] arr = { 1, 2, 3, 4, 5 }; Integer sum = Stream.of(arr).parallel(). reduce(0, Integer::sum); System.out.println(sum); } }
2.Collectors操作
Collectors是Stream API中的一种机制,可以将Stream中的元素进行收集、分组和计数。Collectors可以将Stream中的元素收集到List、Set或Map中,并进行分组、计数等操作。
import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class StreamDemo5 { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("Java"); list.add("Python"); list.add("C++"); list.add("C#"); //将Stream中的元素收集到List中 List<String> resultList1 = list.stream(). filter(x -> x.length() >= 4). collect(Collectors.toList()); //将Stream中的元素收集到Set中 List<String> resultList2 = list.stream(). filter(x -> x.length() >= 4). collect(Collectors.toSet()); //将Stream中的元素分组 Map<Character, List<String>> resultMap = list.stream(). collect(Collectors.groupingBy(x -> x.charAt(0))); } }
3.自定义 Collector
Collector是一个接口,可以实现自定义Collector来对Stream中的元素进行收集和计算。
import java.util.ArrayList; import java.util.List; import java.util.stream.Collector; import java.util.stream.Collectors; public class StreamDemo6 { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("Java"); list.add("Python"); list.add("C++"); list.add("C#"); //自定义 Collector Collector<String, StringBuilder, String> collector = Collector.of( StringBuilder::new, StringBuilder::append, StringBuilder::append, StringBuilder::toString); //使用自定义 Collector String result = list.stream(). filter(x -> x.length() >= 4). collect(collector); System.out.println(result); } }
四、结语
Java Stream API是一种非常强大而灵活的数据处理机制,它提供了丰富的操作和方法,可以方便地对数据进行过滤、映射和归约等操作。熟练掌握Java Stream API可以提高代码的效率和质量。