【java】常用Stream方法
Stream两大特点
- 可读性强
- 不可变性(基于新的流,不改变原始数据)
整体来说,使用非常舒适
一、steam生成
Stream<String> stream = Stream.of("A", "B", "C", "D"); stream.forEach((item)->{ System.out.println(item); }); //将list转化为stream, List<Integer> list = List.of(1,2,3); list.stream().forEach(System.out::println); //将array转化为stream int[] nums = new int[5]; Arrays.stream(nums).forEach((item)->{ System.out.println(item); }); /** 总结: of : of初始化List、Map都有,这方面一致 从list和array转化为stream的时候 list相对简单一点,直接stream()就可以了 array复杂一点,Arrays.stream(arr) * /
二、stream转化为Array和List
(1) 使用toArray得到Array
int[] arr = list.stream().mapToInt((item)->{ //需要返回integer,mapToInt内部会对Integer拆包 return Integer.valueOf(item); }).toArray();
(2)使用collect得到List(当然也可以转成Set)
List<Integer> numList = Arrays.stream(nums).boxed().collect(Collectors.toList()); numList.stream().forEach(System.out::println);
总结:
将array转为list的时候,需要一个boxed, 当然如果是一个String数组的话,就不需要boxed
三、使用map
//mapTo[Int | Long | Double]: toArray补充,转化为特定类型的stream int[] arr = list.stream().mapToInt((item)->{ return Integer.valueOf(item); //返回integer,然后应该是内部做了一层转int }).toArray(); Arrays.stream(arr).forEach(System.out::println); //使用map,可以从一种流转化为另外一种流 Stream<String> strStream = list.stream().map((item)->{ return String.valueOf(item); }); strStream.forEach(System.out::println);
四、使用filter
Stream<String> ns = List.of("1","2","3").stream().filter((item)->{ return item == "1"; }); ns.forEach(item->{ System.out.println(":"+item); });
五、使用使用limit和skip
list.stream().limit(2).forEach(item->{ System.out.println("l:"+item); }); list.stream().skip(2).forEach(item->{ System.out.println("s:" + item); });
六、使用min、max和count
var min = list.stream().min(Integer::compareTo).get().intValue(); System.out.println("min:" +min); //当然我们也可以使用array试一下,可以看出来,一开始如果就是int,就很方便 var minn = Arrays.stream(nums).min().getAsInt(); System.out.println("minn:" +minn);//先get再转化为intValue
七、使用sorted
//自然排序 list.stream().sorted().forEach(item->{ System.out.println("sort:"+item); }); //自然逆序排序 list.stream().sorted(Comparator.reverseOrder()).forEach(item->{ System.out.println("rsort:"+item); });; //根据类属性正向和逆向排序 Student s1 = new Student(); s1.setAge(35); s1.setName("zhangsan"); Student s2 = new Student(); s2.setAge(20); s2.setName("lisi"); Student s3 = new Student(); s3.setAge(40); s3.setName("wangwu"); List<Student> nlist = new ArrayList<>(); nlist.add(s1); nlist.add(s2); nlist.add(s3); //基于属性正向排序 //Comparator的comparing方法 nlist.stream().sorted(Comparator.comparing(Student::getAge)).forEach(item->{ System.out.println("s:"+item.getAge()); }); //逆序,注意reversed是和comparing连着的,链式操作 nlist.stream().sorted(Comparator.comparing(Student::getAge).reversed()).forEach(item->{ System.out.println("rs:"+item.getAge()); });
下一篇:
装饰器模式(io的案例)