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

如何在Java函数中使用StreamAPI?

发布时间:2023-06-24 21:32:13

在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表达式的相关知识。