1、获取Stream流
单列集合:foreach完整版
双列集合通过Ketset()、entryset()
数组的:通过Arrays
Stream流的中间方法:链式编程,原stream流只能使用一次
filter:
limit、skip:
distinct(有自定义对象需要重写hashCode和Equals方法)、contat(合并两个流)
map:手动更改返回值类型
Stream流的终结方法:
toArray方法:收集流中数据,放到数组中
collect方法:把结果收集到集合中:list\set\Map
toList和toSet: 两者区别set可以去重,
格式:collect(Collectors.tolist()/toSet())
// toList和toSet方法演示
public class MyStream7 {public static void main(String[] args) {ArrayList<Integer> list1 = new ArrayList<>();for (int i = 1; i <= 10; i++) {list1.add(i);}list1.add(10);list1.add(10);list1.add(10);list1.add(10);list1.add(10);//filter负责过滤数据的.//collect负责收集数据.//获取流中剩余的数据,但是他不负责创建容器,也不负责把数据添加到容器中.//Collectors.toList() : 在底层会创建一个List集合.并把所有的数据添加到List集合中.List<Integer> list = list1.stream().filter(number -> number % 2 == 0).collect(Collectors.toList());System.out.println(list);Set<Integer> set = list1.stream().filter(number -> number % 2 == 0).collect(Collectors.toSet());System.out.println(set);
}
}
Map:较为复杂
以例题为例子,
提取集合中的信息到map中,并筛选性别为男的元素,键为名字,年龄为值:
ArrayList<String> list = new ArrayList<>(); Collections.addAll(list,"张三-男-21","cala-女-24","李四-男-27","王五-男-29","gaga-女-20");
完整版内部类写法:
Map<String, Integer> map = list.stream().filter(s -> "男".equals(s.split("-")[1])).collect(Collectors.toMap(new Function<String, String>() {@Overridepublic String apply(String s) {return s.split("-")[0];}}, new Function<String, Integer>() {@Overridepublic Integer apply(String s) {return Integer.parseInt(s.split("-")[2]);}}));
Lambda:
Map<String, Integer> map = list.stream().filter(s -> "男".equals(s.split("-")[1])).collect(Collectors.toMap( s-> s.split("-")[0], s -> Integer.parseInt(s.split("-")[2])));System.out.println(map);