如何在Java函数中使用StreamAPI?
在Java函数中使用StreamAPI可以大大简化处理集合、数组等数据的过程,使得代码更加简洁、易读、易维护。以下是使用StreamAPI的基本步骤和一些示例。
1.获取流
使用StreamAPI的 步是获取一个流,可以通过以下方式获取:
- 对List、Set等集合调用stream()方法获取一个流;
- 对数组调用Arrays.stream(arr)方法获取一个流;
- 对文件调用Files.lines(path)方法获取一个流等。
示例:
List<String> list = new ArrayList<>();
Stream<String> stringStream = list.stream();
int[] arr = {1, 2, 3};
IntStream intStream = Arrays.stream(arr);
try(Stream<String> lines = Files.lines(Paths.get("file.txt"))){
lines.forEach(System.out::println);
}
2.中间操作
可以在获取的流上进行多个中间操作,以便对数据进行处理、转换等操作。常见的中间操作有:
- Filter:过滤数据;
- Map:将一个元素转换为另一个元素;
- FlatMap:将一个元素映射为多个元素;
- Distinct:去重;
- Sorted:排序等。
示例:
List<Integer> list = Arrays.asList(1,2,3,4,5,6);
Stream<Integer> stream = list.stream();
//过滤奇数
stream.filter(i -> i % 2 == 0)
.forEach(System.out::println); //2, 4, 6
Stream<String> stringStream = Stream.of("a", "b", "hello");
stringStream.map(s -> s.toUpperCase())
.forEach(System.out::println); //A, B, HELLO
Stream<List<Integer>> listStream = Stream.of(Arrays.asList(1,2),Arrays.asList(3,4,5));
listStream.flatMap(Collection::stream)
.forEach(System.out::println); //1,2,3,4,5
3.终止操作
在进行完中间操作之后,可以使用终止操作来获得想要的结果。常见的终止操作有:
- forEach:遍历所有元素;
- count:返回流中元素的个数;
- max、min:返回最大、最小元素;
- collect:将流中的元素收集到一个集合中;
- reduce:根据指定的计算规则合并元素等。
示例:
List<Integer> list = Arrays.asList(1,2,3,4,5,6);
long count = list.stream()
.filter(i -> i % 2 == 0)
.count();
System.out.println(count); //3
List<String> strings = Arrays.asList("a", "hello", "world");
Optional<String> max = strings.stream().max(String::compareToIgnoreCase);
System.out.println(max.get()); //world
List<Integer> list = Arrays.asList(1,2,3,4,5,6);
List<Integer> newList = list.stream()
.filter(i -> i % 2 == 0)
.collect(Collectors.toList());
System.out.println(newList); //[2,4,6]
总结:
使用StreamAPI可以大大简化处理数据的过程,使得代码更加简洁、易读、易维护。需要注意的是,StreamAPI是基于lambda表达式的,因此 先学习lambda表达式的相关知识。
