Java 8 Streams及其操作

流是来自源的对象序列,支持聚合操作。这些是在Java 8中引入的。

使用Java 8,Collection接口具有两种生成Stream的方法。

  • stream() -返回一个以集合为源的顺序流。

  • parallelStream() -返回一个以集合为源的并行Stream。

对流的一些操作是-

sorted -sorted方法用于按字典顺序或升序对流进行排序

List id = Arrays.asList("Objects","Classes","Interfaces");
List output = id.stream().sorted().collect(Collectors.toList());

map -map方法根据作为参数传递的谓词将集合中的元素映射到其他对象

List list1= Arrays.asList(1,3,5,7);
List finalList = list1.stream().map(a -> a * a * a).collect(Collectors.toList());

filter -filter方法用于根据传递的Predicate参数选择元素

List id = Arrays.asList(“Classes","Methods","Members");
List output = id.stream().filter(s -> s.startsWith("M")).collect(Collectors.toList());

上面的三个操作是中间操作。现在让我们看一下终端操作

collect -collect方法返回中间操作的结果

List id = Arrays.asList(“Classes","Methods","Members");
List output = id.stream().filter(s -> s.startsWith("M")).collect(Collectors.toList());

forEach-此方法迭代流中的每个元素

List list1 = Arrays.asList(1,3,5,7);
List finalList = list1.stream().map(a ->a * a * a).forEach(b->System.out.println(b));

让我们看一个示例来说明Stream的用法-

示例

import java.util.*;
import java.util.stream.*;
public class Example {
   public static void main(String args[]) {
      List<Integer> list1 = Arrays.asList(11,22,44,21); //creating an integer list
      List<String> id = Arrays.asList("Objects","Classes","Methods");
      //创建一个字符串列表
      //映射方法
      List<Integer> answer = list1.stream().map(x -> x*x).collect(Collectors.toList());
      System.out.println(answer);
      //过滤方法
      List<String> output = id.stream().filter(x->x.startsWith("M")).collect(Collectors.toList());
      System.out.println(output);
   }
}

输出结果

[121, 484, 1936, 441]
[Methods]