一.按照要求将数据收集到集合当中
需求:收集男性的信息
1.使用collect(Collectors.toList())的方式将数据收集到List集合当中
2.使用collect(Collectors.toSet())的方式将数据收集到Set集合当中
那么收集到这两种不同的集合当中的区别是什么呢?
重新收集出来的数据分别为List的形式与Set的形式,也就是说它们分别包含了List集合和Set集合的特点,它们之间的区别就是List集合和Set集合的区别
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
public class stream {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, "张无忌-男", "周芷若-女", "赵敏-女", "张三丰-男", "张翠山-男", "张良-男", "王二-男", "谢广坤-男");
//收集到List集合当中
List<String> collectedlist = list.stream()
.filter(s -> "男".equals(s.split("-")[1]))
.collect(Collectors.toList());
System.out.println(collectedlist);
//收集到Set集合当中
Set<String> collectedset = list.stream()
.filter(s -> "男".equals(s.split("-")[1]))
.collect(Collectors.toSet());
System.out.println(collectedset);
}
}
3.使用collect(Collectors.toMap())的方式将数据收集到map集合当中
注意点1:如果要把数据收集到Map集合当中,键不能重复,要符合Map集合的特点,否则会报错
注意点2:要把数据收集到Map集合当中时需要注意确定哪个数据作为键,哪个数据作为值来构成一个entries对象
import java.util.ArrayList;
import java.util.Collections;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
public class stream {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, "张无忌-男-18", "周芷若-女-19", "赵敏-女-20", "张三丰-男-21", "张翠山-男-22", "张良-男-23", "王二-男-24", "谢广坤-男-25");
Map<String, Integer> collectedmap = list.stream().filter(s -> "男".equals(s.split("-")[1]))
//Function当中的两个参数之中的前一个参数表示键的生成规则,后一个参数表示值的生成规则
//Function当中的两个泛型之中的前一个泛型表示每一个数据的类型,后一个泛型表示Map集合中键/值的数据类型
/*方法apply中的
形参:依次表示流里面的每一个数据
方法体:生成键/值的代码
返回值:已经生成的键/值
*/
.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(collectedmap);
//Lambda表达式
/*
Map<String, Integer> collectedmap = list.stream().filter(s -> "男".equals(s.split("-")[1]))
.collect(Collectors.toMap(
s -> s.split("-")[0],
s -> Integer.parseInt(s.split("-")[2])));
System.out.println("collectedmap");
*/
}
}