流是来自源的对象序列,支持聚合操作。这些是在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]