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>() {
@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]);
}
}));
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);