Stream流
Stream流的获取
单列集合: 集合对象.stream();
双列集合: 不能直接获取,需要间接获取
集合对象.KeySet().stream();
集合对象.entrySet().stream();
数组: Arrays.stream(数组名);
同种数据类型的多个数据: Stream.of(1,2,3....);
遍历单列
ArrayList<Object> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.stream().forEach(s-> System.out.println(s));
遍历双列
HashMap<String,Integer> hm = new HashMap<>();
hm.put("aa",11);
hm.put("bb",22);
hm.put("cc",33);
hm.put("dd",44);
hm.keySet().stream().forEach(s-> System.out.println(s)); //只获取键
hm.entrySet().stream().forEach(s-> System.out.println(s)); //获取键和值
遍历数组
int[] arr = {1,2,3,4,5,6};
Arrays.stream(arr).forEach(s-> System.out.println(s));
遍历同种数据类型的多个数据
Stream.of(1,2,3,4,5,6).forEach(s-> System.out.println(s));
常用中间方法
ArrayList<String> list = new ArrayList<>();
list.add("王王");
list.add("王王王");
list.add("金金");
list.add("金金金");
list.add("金金金");
list.add("金金金");
ArrayList<String> list2 = new ArrayList<>();
list2.add("王王");
list2.add("王王王");
list2.add("金金");
list2.add("金金金");
//list.stream().limit(2).forEach(s-> System.out.println(s)); //limit(2)截取前两个
//list.stream().skip(2).forEach(s-> System.out.println(s)); //skip(2)跳过前两个
//Stream.concat(list.stream(),list2.stream()).forEach(s-> System.out.println(s)); //Stream.concat(a,b)合并a和b两个流为一个流
//list.stream().distinct().forEach(s-> System.out.println(s)); //distinct()去除流中重复的元素
//System.out.println(list.stream().count()); //返回流中的个数
filter
ArrayList<String> list = new ArrayList<>();
list.add("王王");
list.add("王王王");
list.add("金金");
list.add("金金金");
//filter方法获取流中的每一个数据
//而test方法中的s,就依次表示流中的每一个数据
//如果判断的结果为true,则数据留下,false则不要
list.stream()
.filter(s -> s.startsWith("王")) //开头是 王的
.forEach(s -> System.out.println(s)); //遍历符合条件的数据
}
收集方法
ArrayList<Integer> list = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
list.add(i);
}
//filter负责过滤数据
//collect负责收集数据
//获取流中剩余的数据,但是他不负责创建容器,也不负责把数据添加到容器中
//Collectors.toList() 在底层会创建一个List集合 并把所有的数据添加到list集合中
List<Integer> res = list.stream().filter(i -> i % 2 == 0).collect(Collectors.toList());
System.out.println(res);
//List 和 Set 区别在于 List可以保留重复的内容 Set则不会保留重复的
Set<Integer> res2 = list.stream().filter(i -> i % 2 == 0).collect(Collectors.toSet());
System.out.println(res2);
}
Map
//保留年龄大于等于24岁的人,并将结果收集到Map集合中,姓名为键,年龄为值
ArrayList<String> list = new ArrayList<>();
list.add("zhangsan,23");
list.add("lisi,24");
list.add("wangwu,25");
Map<String, Integer> map = list.stream().filter(s -> {
String[] split = s.split(",");
int age = Integer.parseInt(split[1]);
return age >= 24;
//collect方法只能获取到流中剩余的每一个数据
//在底层不能创建容器,也不能把数据添加到容器中
//Collectors.toMap 创建一个map集合并将数据添加到集合当中
// s 依次表示流中的每一个数据
// 第一个lambda表达式是如何获取到Map中的键
// 第二个lambda表达式是如何获取到Map中的值
}).collect(Collectors.toMap(s -> s.split(",")[0], s -> Integer.parseInt(s.split(",")[1])
));
System.out.println(map);
1 条评论
想想你的文章写的特别好www.jiwenlaw.com