伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

Java8 流操作

来源:本站原创 浏览:54次 时间:2023-03-25

分类

Stream操作分类

无状态:指元素的处理不受之前元素的影响;

有状态:指该操作只有拿到所有元素之后才能继续下去。

非短路操作:指必须处理所有元素才能得到最终结果;

短路操作:指遇到某些符合条件的元素就可以得到最终结果,如 A || B,只要A为true,则无需判断B的结果

用法

创建

//通过Collection集合List<String> list = new ArrayList<>();Stream<String> stream = list.stream();//数组转化String[] list = new String[5];Stream<String> stream = Arrays.stream(list);//Stream中的静态方法:of()、iterate()、generate()Stream<Integer> stream1 = Stream.of(1,2,3,4,5,6);Stream<Integer> stream2 = Stream.iterate(0, x -> x).limit(3);Stream<Double> stream3 = Stream.generate(Math::random).limit(4);

流中间操作

筛选与切片

filter 过滤、distinct 去重

list.stream()        //将年份大于10的留下        .filter(x->x.getYear()>10)        //去重,由于list内是对象,则通过hash值        .distinct();

skip 跳过、limit 取出

skip和limit共同使用可以实现分页效果,类似于mysql的limit关键字

list.stream()        //跳过前两条        .skip(2)        //取出结果的1-3条        .limit(3);

映射

map、flatMap

map:产生的结果只会一对一

flatMap:产生一对多结果

List<String> list = Arrays.asList("Hello", "World");//map产生的结果数量不会增多List<String[]> mapResult = list.stream()        .map(x -> x.split(""))        .collect(toList());//flatMap产生的结果数量会增多List<String> flatMapResult = list.stream()                .flatMap(x -> Arrays.stream(x.split("")))                .collect(toList());

排序

sorted()、sorted(Comparator com)

sorted():自然排序,流中元素需实现Comparable接口

sorted(Comparator com):定制排序,自定义Comparator排序器

Stream<User> sorted = list1.stream()               //修改数据               .peek(x->x.setId(5));

匹配操作

anyMatch、allMatch、noneMatch、findFirst、…

anyMatch:只要有一个匹配上

allMatch:每一个匹配上

noneMatch:没有一个匹配上

findFirst:返回流中第一个元素

findAny:返回流中的任意元素

count:返回流中元素的总个数

max:返回流中元素最大值

min:返回流中元素最小值

boolean b = list.stream()                //有一个符合条件返回true                .anyMatch(x -> x.getId() > 1);

代码汇总后的例子:

@Data@NoArgsConstructor@AllArgsConstructor/** * 学生 */class Student{    private String name;    private Integer age;    private Integer type;    private BigDecimal money;}


Student s1 = new Student("aa", 10,1,new BigDecimal(1000));Student s2 = new Student("bb", 20,1,new BigDecimal(2000));Student s3 = new Student("cc", 25,2,new BigDecimal(3000));Student s4 = new Student("dd", 30,2,new BigDecimal(2500));list = Arrays.asList(s1, s2, s3,s4);//转成listList<Integer> ageList = list.stream().map(Student::getAge).collect(Collectors.toList());//转成setSet<Integer> ageSet = list.stream().map(Student::getAge).collect(Collectors.toSet());//字符串分隔符连接(aa,bb,cc)String stringJoin = list.stream().map(Student::getName).collect(Collectors.joining(",", "(", ")"));//-------------聚合操作----------------// 1.计算数量Long count = list.stream().filter(x->x.getAge()>3).count();// 2.最大值Integer maxAge = list.stream().map(Student::getAge).max(Integer::compare).orElse(0);// 3.求和Integer sumAge = list.stream().mapToInt(Student::getAge).sum();//BigDecimal需要做一次转化BigDecimal sumMoney = list.stream()        .map(Student::getMoney)        .reduce(                BigDecimal.ZERO,                BigDecimal::add        );//平均值Double averageAge = list.stream().collect(Collectors.averagingDouble(Student::getAge));BigDecimal averMoney = list.stream().map(Student::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add).divide(BigDecimal.valueOf(list.size()), 2, BigDecimal.ROUND_HALF_UP);//分组Map<Integer, List<Student>> ageMap = list.stream().collect(Collectors.groupingBy(Student::getAge));//多重分组,先根据类型分再根据年龄分Map<Integer, Map<Integer, List<Student>>> sexAgeMap = list.stream().collect(Collectors.groupingBy(Student::getSex, Collectors.groupingBy(Student::getAge)));//分区//分成两部分,一部分大于10岁,一部分小于等于10岁Map<Boolean, List<Student>> partMap = list.stream().collect(Collectors.partitioningBy(v -> v.getAge() > 10));//reduce 归并BigDecimal t = list.stream()        .map(Student::getMoney)        .reduce(                BigDecimal.ZERO,                (x,y)->{                    return x.add(BigDecimal.ONE).multiply(y);                }        );

原作者:适应地球生活
原文链接:Java8 流操作_qq_40749230的博客-CSDN博客
原出处:CSDN博客
侵删


  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net