1.Stream流的终结方法
2. collect方法
collect方法用于收集流中的数据放到集合中去,可以将流中的数据放到List,Set,Map集合中
2.1 将流中的数据收集到List集合中
package com.njau.d10_my_stream;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* 目标:掌握Stream流的终结方法
* 名称 说明
* collect(Collector collector) 收集流中的数据 ,放到集合中
*/
public class StreamDemo10 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list,"张无忌-男-15","周芷若-女-16","赵敏-女-17","张强-男-18","张三丰-男-19","张翠山-男-23",
"张良-男-20","王二麻子-男-21","谢广坤-男-22");
// 1.收集到List集合中去
Stream<String> stream1 = list.stream();
List<String> stringList = stream1.collect(Collectors.toList());
System.out.println(stringList);
// 将所有男性收集到List集合中去
Stream<String> stream11 = list.stream();
List<String> stringList1 = stream11.filter(s -> "男".equals(s.split("-")[1])).collect(Collectors.toList());
System.out.println(stringList1);
}
}
使用.collect方法中的(Collectors.toList())方法可以将流中的数据收集到一个ArrayList集合中去。
2.2 将流中的数据收集到Set集合中
package com.njau.d10_my_stream;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* 目标:掌握Stream流的终结方法
* 名称 说明
* collect(Collector collector) 收集流中的数据 ,放到集合中
*/
public class StreamDemo10 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list,"张无忌-男-15","周芷若-女-16","赵敏-女-17","张强-男-18","张三丰-男-19","张翠山-男-23",
"张良-男-20","王二麻子-男-21","谢广坤-男-22");
// 2.收集到Set集合中去
Stream<String> stream2 = list.stream();
Set<String> stringSet = stream2.collect(Collectors.toSet());
System.out.println(stringSet); // set集合本就无序,不可重复
// 将所有男性收集到Set集合中去,会转成HashSet集合,HashSet底层重写了hashCode和equals方法,因此相同的会去除重复
Stream<String> stream21 = list.stream();
Set<String> stringSet1 = stream21.filter(s -> "男".equals(s.split("-")[1])).collect(Collectors.toSet());
System.out.println(stringSet1);
}
}
使用.collect方法中的(Collectors.toSet())方法可以将流中的数据收集到一个HashSet集合中去。由于HashSet集合对于String类型在底层重写了equals方法和hashCode方法,因此会去除重复的元素。
2.3 将流中的数据收集到Map集合中
package com.njau.d10_my_stream;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* 目标:掌握Stream流的终结方法
* 名称 说明
* collect(Collector collector) 收集流中的数据 ,放到集合中
*/
public class StreamDemo10 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list,"张无忌-男-15","周芷若-女-16","赵敏-女-17","张强-男-18","张三丰-男-19","张翠山-男-23",
"张良-男-20","王二麻子-男-21","谢广坤-男-22");
// 3.收集到Map集合中去
// 将所有男性收集到Map集合中去
// toMap用法详解:
/*
参数一:表示生成键的规则
参数二:表示生成值的规则
匿名内部类new Function:
泛型一:要作为键的数据原本的数据类型 泛型二:键的数据类型
apply方法:
形参:传入的要作为键(值)的原始数据
方法体:生成键(值)
返回值:键(值)的数据
*/
Stream<String> stream3 = list.stream();
Map<String, Integer> stringIntegerMap = stream3.filter(s -> "男".equals(s.split("-")[1])).
collect(Collectors.toMap(new Function<String, String>() {
@Override
public String apply(String s) {
return s.split("-")[0];
}
},
new Function<String, Integer>() {
@Override
public Integer apply(String s) {
return Integer.parseInt(s.split("-")[2]);
}
}));
System.out.println(stringIntegerMap);
}
}
在toMap方法中要定义两个匿名内部类对象(分别对应参数1和参数2),第一个匿名内部类对象(参数1)是进行Map集合中键的生成的,第二个匿名内部类对象(参数2)是进行Map集合中值的生成的。
匿名内部类中的泛型1:要作为键(值)的数据原本的数据类型
匿名内部类中的泛型2:键(值)的数据类型
apply方法:
形参:传入的要作为键(值)的原始数据 方法体:生成键(值) 返回值:键(值)的数据
3. stream流总结