Java 8 Stream操作的介绍

您所在的位置:网站首页 stream中map和flatmap Java 8 Stream操作的介绍

Java 8 Stream操作的介绍

2023-06-10 00:32| 来源: 网络整理| 查看: 265

什么是Stream?

Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选、排序、聚合等。

image.png 如何创建Stream list.stream() //转换成流进行操作 Stream 操作符的分类

主要分为两种:中间操作符和结束操作符

中间操作符:Lambda表达式的链式操作,可以链式对流进行操作,操作完后还是返回流

结束操作符:用来结束流的,数据经过中间加工操作,最后通过结束操作符对数据进行收集或者消费的,数据到了结束操作这里就不会向下流动了,结束操作符只能使用一次

中间操作符例子 1.filter /** * 用于过滤不满足条件的元素 */ @Test public void filter(){ List list = Arrays.asList("孙宇峰","付凯","张剑","郭忠波","张三峰","xxx","付凯"); List filtered = list.stream().filter(str -> str.contains("峰")).collect(Collectors.toList()); System.out.println(filtered); } 2.distinct /** * 用于去掉重复的元素 */ @Test public void distinct(){ List list = Arrays.asList("孙宇峰","付凯","张剑","郭忠波","张三峰","xxx","付凯"); List distincted = list.stream().distinct().collect(Collectors.toList()); System.out.println(distincted); } 3.limit /** * 用于获取前n个元素 */ @Test public void limit(){ List list = Arrays.asList("孙宇峰","付凯","张剑","郭忠波","张三峰","xxx","付凯"); List limited = list.stream().limit(3).collect(Collectors.toList()); System.out.println(limited); } 4.skip /** * 用于获取除前n个元素以外的所有元素 */ @Test public void skip(){ List list = Arrays.asList("孙宇峰","付凯","张剑","郭忠波","张三峰","xxx","付凯"); List skiped = list.stream().skip(3).collect(Collectors.toList()); System.out.println(skiped); } 5.map /** * 用于对所有元素进行集体的操作 */ @Test public void map(){ List list = Arrays.asList("孙宇峰","付凯","张剑","郭忠波","张三峰","xxx","付凯"); List mapped = list.stream().map(str->"帅哥姓名是->"+str).collect(Collectors.toList()); System.out.println(mapped); }

对流中的每一个元素进行处理

6.flatmap /** * 用于对所有元素进行扁平化的操作 */ @Test public void flatMap(){ List list = Arrays.asList("孙宇峰","付凯","张剑","郭忠波","张三峰","xxx","付凯"); List flatMaped = list.stream().flatMap(str -> javaStream.getCharacter(str)).collect(Collectors.toList()); System.out.println(flatMaped); } //创建了一个字符流转换的方法 public static Stream getCharacter(String str){ ArrayList list = new ArrayList(); for (Character character : str.toCharArray()) { list.add(character); } return list.stream(); }

流扁平化,让你把一个流中的“每个值”都换成另一个流,然后把所有的流连接起来成为一个流总结: map是对一级元素进行操作,flatmap是对二级元素操作。

7.sorted /** * 用于对所有元素进行以a到z顺序进行排序 */ @Test public void sorted(){ //---------------------------字母排序------------------------------------- List list = Arrays.asList("abc","sd","as","few","wth","dfg","as"); List sorted = list.stream().sorted().collect(Collectors.toList());//正序 List collect1 = list.stream().sorted(Collections.reverseOrder(Collator.getInstance(Locale.US))).collect(Collectors.toList()); System.out.println(sorted); System.out.println(collect1); //---------------------------汉字排序------------------------------------- List list3 = Arrays.asList("吕布","刘备","阿斗","赵云","张辽","马超","法正"); List sorted1 = list3.stream().sorted(Collator.getInstance(Locale.CHINA)).collect(Collectors.toList());//正序 List collect2 = list3.stream().sorted(Collections.reverseOrder(Collator.getInstance(Locale.CHINA))).collect(Collectors.toList()); System.out.println(sorted1); System.out.println(collect2); //---------------------------数字排序------------------------------------- List list1 = Arrays.asList(1,5,9,54,33,-52,54); List collect = list1.stream().sorted().collect(Collectors.toList());//正序 Stream sorted2 = list1.stream().sorted(Collections.reverseOrder());//反序 System.out.println(collect); sorted2.forEach(s-> System.out.print(s+",")); } image.png and so on 结束操作符例子 1.anyMatch /** * 用于判断集合中是否有一个元素满足条件 */ @Test public void anyMatch(){ List list = Arrays.asList("孙宇峰","付凯","张剑","郭忠波","张三峰","xxx","付凯"); boolean a = list.stream().anyMatch(s -> s.contains("峰")); System.out.println(a); 2.allMatch /** * 用于判断集合中是否所有元素都满足条件 */ @Test public void allMatch(){ List list = Arrays.asList("孙宇峰","付凯","张剑","郭忠波","张三峰","xxx","付凯"); boolean a = list.stream().allMatch(s -> s.contains("峰")); System.out.println(a); } 3.forEach /** * 用于循环 */ @Test public void forEach(){ List list = Arrays.asList("孙宇峰","付凯","张剑","郭忠波","张三峰","xxx","付凯"); list.stream().forEach(s -> System.out.println(s)); } 4.collect /** * 用于将流转换成其他类型的数据:list,map,set */ @Test public void collect(){ List list = Arrays.asList("孙宇峰","付凯","张剑","郭忠波","张三峰","xxx","付凯"); Set collect = list.stream().collect(Collectors.toSet()); System.out.println(collect); } 5.count /** * 获取集合中元素的数量 */ @Test public void count(){ List list = Arrays.asList("孙宇峰","付凯","张剑","郭忠波","张三峰","xxx","付凯"); long count = list.stream().count(); System.out.println(count); } 6.groupingBy /*分组*/ public static void group(){ Map map = users().stream() .collect(Collectors.groupingBy(User::getSex)); System.out.println(new Gson().toJson(map)); System.out.println(); Map map2 = users().stream() .collect(Collectors.groupingBy(User::getSex, Collectors.groupingBy(User::getAge))); System.out.println(new Gson().toJson(map2)); } 7.maxBy、minBy public static void max_min(){ List list = users(); Optional max = list.stream() .collect( Collectors.maxBy( Comparator.comparing(User::getAge) ) ); Optional min = list.stream() .collect( Collectors.minBy( Comparator.comparing(User::getAge) ) ); System.out.println("max--> " + max+" min--> "+ min); and so on


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3