void forEach ( Consumer action ) → 遍历
long count () → 统计
toArray () → 收集流中的数据,放到数组中
collect ( Collector collector ) → 收集流中的数据,放到集合中
count () 方法:
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, "张三-15", "李四-16", "王五-17", "赵六-18");
long count = list.stream().count();
System.out.println(count); // 输出 4
toArray () 方法:
toArray () 方法的参数的作用:负责创建一个指定类型的数组
toArray () 方法的底层 会依次得到流里面的每一个数据,并把数据放到数组当中
toArray () 方法的返回值:是一个装着流里面所有数据的数组
eg:
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, "张三", "李四", "王五", "赵六");
// IntFunction 的泛型:具体类型的数组(以 String 为例)
String[] arr = list.stream().toArray(new IntFunction<String[]>() {
@Override
public String[] apply(int value) {
// apply 方法的形参 value 表示流中数据的个数,要跟数组的长度保持一致(流里面有多少个数据,数组的长度就是多少)
// apply 方法的返回值:具体类型的数组,类型与 IntFunction 的泛型保持一致
// apply 方法的反方法体:就是创建数组
return new String[value];
}
});
System.out.println(Arrays.toString(arr)); // 打印结果:[张三, 李四, 王五, 赵六]
collect(Collector collector) 方法:收集流中的数据,放到集合中(List Set Map)
1. 收集到 List 集合当中:
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, "张三-男-15", "李四-女-16", "王五-女-17", "赵六-男-18");
List<String> newList = list.stream().collect(Collectors.toList());
System.out.println(newList);
2. 收集到 Set 集合当中:
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, "张三-男-15", "李四-女-16", "王五-女-17", "赵六-男-18");
Set<String> newList = list.stream().collect(Collectors.toSet());
System.out.println(newList);
3. 收集到 Map 集合当中:(要规定谁作为键,谁作为值)
注意:如果我们要收集到Map集合当中,键不能重复,否则会报错
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, "张三-15", "李四-16", "王五-17", "赵六-18");
//toMap方法的两个形参:第一个表示键的生成规则,第二个表示值的生成规则
Map<String, Integer> map = list.stream().collect(Collectors.toMap(new Function<String, String>() {//第一个泛型表示流里面数据的类型,第二个泛型表示Map集合当中键的类型
@Override
public String apply(String s) {//形参 s 依次表示流里面的每一个数据。apply方法体的作用:生成键。返回值:生成的键
return s.split("-")[0];
}
}, new Function<String, Integer>() {//第一个泛型表示流里面数据的类型,第二个泛型表示Map集合当中值的类型
@Override
public Integer apply(String s) {//形参 s 依次表示流里面的每一个数据。apply方法体的作用:生成值。返回值:生成的值
return Integer.parseInt(s.split("-")[1]);
}
}));
System.out.println(map); //打印结果:{李四=16, 张三=15, 王五=17, 赵六=18}
简写形式:
ArrayList<String> list = new ArrayList<>();标签:Java,Stream,终结,ArrayList,list,赵六,王五,new,apply From: https://www.cnblogs.com/gagaya2/p/17775627.html
Collections.addAll(list, "张三-15", "李四-16", "王五-17", "赵六-18");
Map<String, Integer> map = list.stream()
.collect(Collectors.toMap(s -> s.split("-")[0], s -> Integer.parseInt(s.split("-")[1])));
System.out.println(map);