创建一个ArrayList 集合,里面存储四个数据,调用 s t r e a m \color{pink}{stream} stream,其中forEach是打印输出。
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list,"张三丰","张飞","曹操","孙尚香");
list.stream().forEach(s -> System.out.println(s));
创建一个HashMap集合,里面存储对应的Key,Vlaue ,遍历人名。
HashMap<Integer,String> hm = new HashMap<>();
hm.put(1,"张三丰");
hm.put(2,"张飞");
hm.put(3,"曹操");
hm.put(4,"孙尚香");
Set<Integer> set = hm.keySet();
set.stream().forEach(s-> System.out.println(hm.get(s)));
创建一个数组,存储1,2,3 值,使用 s t r e a m ( a r r ) \color{pink}{stream(arr)} stream(arr),遍历数组。
Integer[] arr = {1,2,3};
Arrays.stream(arr).forEach(s-> System.out.println(s));
直接将数据放入 S t r e a m . o f \color{pink}{Stream.of} Stream.of中,遍历数据。
Stream.of(1,2,3,4,5,6,7).forEach(s-> System.out.println(s));
filter(函数式接口)
filter方法会拿到流中的每一个数据
把每一个数据传递到Lambda表达式的形参s
如果返回的是false就丢弃,如果返回的是true留下来
首先我们创建一个ArrayList集合,里面存储一些数据,方便我们后续使用
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list,"1","2","3","4","5","5","1");
list.stream().filter((String s)->{return true;}).forEach(s -> System.out.println(s));
解释: f i l t e r ( ( S t r i n g \color{red}{filter((String} filter((String s ) − > { r e t u r n \color{red}{s)->{\{return }} s)−>{return t r u e ; } ) \color{red}{true;\})} true;})
s 代表集合中存储的每一个数据,而true 表示每一个数据都会保留。
list.stream().limit(3).forEach(s-> System.out.println(s));
解释: 表示截取前三个元素,只遍历前三个数据。
list.stream().skip(3).forEach(s-> System.out.println(s));
解释:跳过前三个元素,遍历后面的元素。
Stream<String> stream1 = list.stream().limit(3);
Stream<String> stream2 = list.stream().skip(3);
Stream.concat(stream1,stream2).forEach(s-> System.out.println(s));
解释:将 s t r e a m 1 , s t r e a m 2 \color{red}{stream1,stream2} stream1,stream2流进行拼接打印。
保证元素的唯一性。
list.stream().distinct().forEach(s-> System.out.println(s));
默认升序
list.stream().sorted().forEach(s-> System.out.println(s));
list.stream().sorted(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return Integer.parseInt(o2)-Integer.parseInt(o1);
}
}).forEach(s-> System.out.println(s));
解释:使用匿名内部类,Comparator并重写compar()方法,使用o2-o1,因为我们上面存储的数据是String类型,我们将类型转化为int类型。
list.stream().count();
stream的方法并不改变原有的集合。
存储数据,方便我们下面理解。
ArrayList<Integer> list = new ArrayList<>();
Collections.addAll(list,1,2,3,4,5,5,6);
collect方法只负责收集数据,而真正创建集合对象是Collectors.toList
List<Integer> newList = list.stream().filter(s -> s > 3).collect(Collectors.toList());
System.out.println(newList);
解释:filter里面的数据是,只要数据中大于3的元素。将大于3的元素存储在一个新的集合newList中。
Set<Integer> set = list.stream().skip(3).collect(Collectors.toSet());
System.out.println(set);
解释:跳过原有list集合中的前三个元素,将其余元素存储在set集合中,由于Set集合的特性,自动给剩余的元素去重,保证元素的唯一性。
Map集合理解起来有些难度,我直接在代码中写注释。
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list,"zhangsan,23","lisi,24","wangwu,25");
//创建一个Arraylist的集合,里面存储3个数据
Map<String, Integer> map = list.stream().filter(s -> {
String[] strings = s.split(",");
//将ArrayList集合中的数据,使用,分割开,存储到strings的数组中
int age = Integer.parseInt(strings[1]);
//由于上面的数据已经分割存储到数组中,strings[1]中存储的是数字字符串,23,24,25,
//这里我们将String类型转换为int类型
return age >= 24;
//只要年龄大于等于24的数据
// }).collect(Collectors.toMap(Function类型的数据,Function类型的数据));
}).collect(Collectors.toMap(
(String s) -> {
return s.split(",")[0];
//这里返回的是Map的键Key lisi,wangwu
},
(String s) -> {
return Integer.parseInt(s.split(",")[1]);
//这里返回的是Map的值Value 24,25
})
);
System.out.println(map) ;
学的不是技术,更是梦想!!!