java stream的常用例子

一、标题
  java stream的常用例子

二、描述
  stream在当前互联网技术社区传播的已经很广泛了,且有阿里11.11用stream很好的完成数据处理案例,为此迎着互联网技术风口细细地学习一下stream,说不定能让代码飘起来

三、常用的例子
  以下内容均使用该代码作为前提:

 1 public class AppTest {
 2
 3          public static void main(String[] args){
 4             List<StreamDemo> list = new ArrayList<>();
 5             list.add(StreamDemo.builder().dateValue(LocalDate.now()).intValue(10).strValue("str1").descValue("str1").timeValue(LocalTime.now()).dateTimeValue(LocalDateTime.now()).bigDecimal(BigDecimal.TEN).build());
 6             list.add(StreamDemo.builder().dateValue(LocalDate.now()).intValue(15).strValue("str3").descValue("str2").timeValue(LocalTime.now()).dateTimeValue(LocalDateTime.now()).bigDecimal(BigDecimal.ONE).build());
 7             list.add(StreamDemo.builder().dateValue(LocalDate.now()).intValue(11).strValue("str6").descValue("str3").timeValue(LocalTime.now()).dateTimeValue(LocalDateTime.now()).bigDecimal(BigDecimal.ZERO).build());
 8             list.add(StreamDemo.builder().dateValue(LocalDate.now()).intValue(16).strValue("str8").descValue("str4").timeValue(LocalTime.now()).dateTimeValue(LocalDateTime.now()).bigDecimal(BigDecimal.TEN).build());
 9         }
10     }
11     @Builder
12     @AllArgsConstructor
13     @Data
14     class StreamDemo{
15         private String strValue;
16         private String descValue;
17         private Integer intValue=2;
18         private LocalDate dateValue;
19         private LocalTime timeValue;
20         private LocalDateTime dateTimeValue;
21         private BigDecimal bigDecimal;
22
23         public String toString() {
24             return "StreamDemo{" +
25                     "strValue=‘" + strValue + ‘\‘‘ +
26                     ", descValue=‘" + descValue + ‘\‘‘ +
27                     ", intValue=" + intValue +
28                     ", dateValue=" + dateValue +
29                     ", timeValue=" + timeValue +
30                     ", dateTimeValue=" + dateTimeValue +
31                     ", bigDecimal=" + bigDecimal +
32                     ‘}‘;
33         }
34     }

  1、操作数值

    1.1、获取累积指

System.out.println(Stream.of(list.get(0),list.get(1),list.get(2)).map(StreamDemo::getIntValue).reduce(10,(n,m)->n*m));
    System.out.println(Stream.of(list.get(0),list.get(1),list.get(2)).map(StreamDemo::getIntValue).collect(Collectors.reducing((n,m)->n+m)).get());

    1.2、获取最大值

System.out.println(Stream.of(list.get(0),list.get(1),list.get(2)).map(StreamDemo::getIntValue).max((n,m)->n.compareTo(m)).get());
    System.out.println(Stream.of(list.get(0),list.get(1),list.get(2)).collect(Collectors.maxBy((n,m)->n.getIntValue().compareTo(m.getIntValue()))).get());

    1.3、获取最小值

System.out.println(Stream.of(list.get(0),list.get(1),list.get(2)).map(StreamDemo::getIntValue).min((n,m)->n.compareTo(m)).get());
    System.out.println(Stream.of(list.get(0),list.get(1),list.get(2)).collect(Collectors.minBy((n,m)->n.getIntValue().compareTo(m.getIntValue()))).get());

    1.4、获取数值集合

Stream.of(list.get(0),list.get(1),list.get(2)).mapToInt(StreamDemo::getIntValue).forEach(System.out::println);
    Stream.of(list.get(0),list.get(1),list.get(2)).collect(Collectors.mapping(StreamDemo::getIntValue,Collectors.toList())).forEach(System.out::println);

    1.5、将多个数值集合合并为一个数值集合

Stream.of(list.get(0),list.get(1),list.get(2)).flatMapToInt(f-> IntStream.concat(IntStream.of(f.getIntValue()),IntStream.of(f.getBigDecimal().intValue()))).sorted().forEachOrdered(System.out::println);

    1.6、获取平均值

System.out.println(Stream.of(list.get(0),list.get(1),list.get(2)).collect(Collectors.averagingInt(StreamDemo::getIntValue)).intValue());

    1.7、获取数据统计

System.out.println(Stream.of(list.get(0),list.get(1),list.get(2)).collect(Collectors.summarizingInt(StreamDemo::getIntValue)).toString());

  2、操作集合

    2.1:、获取集合长度

System.out.println(Stream.of(list.get(0),list.get(1),list.get(2)).count());
    System.out.println(Stream.of(list.get(0),list.get(1),list.get(2)).collect(Collectors.counting()));

    2.2、限制集合长度

Stream.of(list.get(0),list.get(1),list.get(2)).limit(1).forEach(System.out::println);

    2.3、跳过集合前几项

Stream.of(list.get(0),list.get(1),list.get(2)).skip(1).forEach(System.out::println);

    2.4、集合排序

Stream.of(list.get(0),list.get(1),list.get(2)).sorted((n,m)->n.getIntValue().compareTo(m.getIntValue())).forEach(System.out::println);

    2.5、去重

Stream.of(list.get(0),list.get(1),list.get(2)).distinct().forEach(System.out::println);

    2.6、集合过滤

Stream.of(list.get(0),list.get(1),list.get(2)).filter(streamDemo -> StringUtils.isEmpty(streamDemo.getStrValue())).forEach(System.out::println);
    System.out.println(Stream.of(list.get(0),list.get(1),list.get(2)).noneMatch(streamDemo -> StringUtils.isEmpty(streamDemo.getStrValue())));
    System.out.println(Stream.of(list.get(0),list.get(1),list.get(2)).anyMatch(streamDemo -> StringUtils.isEmpty(streamDemo.getStrValue())));
    System.out.println(Stream.of(list.get(0),list.get(1),list.get(2)).allMatch(streamDemo -> StringUtils.isEmpty(streamDemo.getStrValue())));
    Stream.of(list.get(0),list.get(1),list.get(2)).collect(Collectors.partitioningBy(streamDemo -> StringUtils.isEmpty(streamDemo.getStrValue()))).forEach((k,v)->System.out.printf("k:%s,v:%s\n",k,v));

    2.7、给集合每项添加内容

Stream.of(list.get(0),list.get(1),list.get(2)).peek(streamDemo -> streamDemo.setDescValue(streamDemo.getStrValue())).forEach(System.out::println);

    2.8、集合分组

Stream.of(list.get(0),list.get(1),list.get(2)).collect(Collectors.groupingBy(StreamDemo::getStrValue,Collectors.toList())).forEach((k,v)->System.out.printf("k:%s,v:%s\n",k,v));
    Stream.of(list.get(0),list.get(1),list.get(2)).collect(Collectors.groupingBy(StreamDemo::getStrValue,Collectors.groupingBy(StreamDemo::getStrValue))).forEach((k,v)->System.out.printf("k:%s,v:%s\n",k,v));
    System.out.println(Stream.of(list.get(0),list.get(1),list.get(2)).map(StreamDemo::getStrValue).collect(Collectors.joining(";")));
    Stream.of(list.get(0),list.get(1),list.get(2)).collect(Collectors.toMap(StreamDemo::getStrValue,StreamDemo::getDescValue)).forEach((k,v)->System.out.printf("k:%s,v:%s\n",k,v));
    System.out.println(Stream.of(list.get(0),list.get(1),list.get(2)).collect(Collectors.mapping(StreamDemo::getStrValue,Collectors.joining(";"))));

    2.9、合并集合

Stream.of(list.get(0),list.get(1),list.get(2)).flatMap(f->Stream.concat(Stream.of(f.getIntValue()),Stream.of(f.getBigDecimal()))).forEach(System.out::println);

    2.10、将集合转为数组

System.out.println(Arrays.toString(Stream.of(list.get(0),list.get(1),list.get(2)).toArray(t->new StreamDemo[t])));

  

    

原文地址:https://www.cnblogs.com/lswater/p/12003473.html

时间: 2024-10-14 11:24:16

java stream的常用例子的相关文章

Java Stream 使用详解

Stream是 Java 8新增加的类,用来补充集合类. Stream代表数据流,流中的数据元素的数量可能是有限的,也可能是无限的. Stream和其它集合类的区别在于:其它集合类主要关注与有限数量的数据的访问和有效管理(增删改),而Stream并没有提供访问和管理元素的方式,而是通过声明数据源的方式,利用可计算的操作在数据源上执行,当然BaseStream.iterator()和BaseStream.spliterator()操作提供了遍历元素的方法. Java Stream提供了提供了串行和

一文带你入门Java Stream流,太强了

两个星期以前,就有读者强烈要求我写一篇 Java Stream 流的文章,我说市面上不是已经有很多了吗,结果你猜他怎么说:“就想看你写的啊!”你看你看,多么苍白的喜欢啊.那就“勉为其难”写一篇吧,嘻嘻. 单从“Stream”这个单词上来看,它似乎和 java.io 包下的 InputStream 和 OutputStream 有些关系.实际上呢,没毛关系.Java 8 新增的 Stream 是为了解放程序员操作集合(Collection)时的生产力,之所以能解放,很大一部分原因可以归功于同时出现

hadoop java接口及常用api

# java接口及常用api package com.yting.hadoop.hdfs; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.net.URI; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputS

android开发最常用例子整理----(1)自定义按钮实现

android开发最常用例子整理----(1)自定义按钮实现 一.Activity MainActivity.java源码: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }

Java EE中常用的四个框架

Java EE中常用的四个框架     Struts     Struts是一个基于Sun Java EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的.     Struts框架可分为以下四个主要部分,其中三个就和MVC模式紧密相关:     1.模型 (Model),本质上来说在Struts中Model是一个Action类(这个会在后面详细讨论),开发者通过其实现商业逻辑,同时用户请求通过控制器(Controller)向Action的转发过程是基于由struts-config

android开发最常用例子整理----(2)自定义ListView(SimpleAdapter实现)

android开发最常用例子整理----(2)自定义ListView(SimpleAdapter实现) 一.Activity MainActivity.java源码: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layou

java stream 原理

java stream 原理 需求 从"Apple" "Bug" "ABC" "Dog"中选出以A开头的名字,然后从中选出最长的一个,并输出其长度 1. 最直白的实现 缺点 迭代次数过多 频繁产生中间结果,性能无法接受 2. 平常写法 int longest = 0; for(String str : strings){ if(str.startsWith("A")){// 1. filter(), 保留以

Java开发中常用的IntelliJ IDEA插件

工欲善其事,必先利其器 一.Alibaba Java Coding Guidelines 代码规范插件:阿里开发的此插件应该说极大的改善程序员的代码质量,帮助程序员规范自己的代码 安装使用: 1. 打开File -> Settings -> Plugins -> Browse repositories...,输入“Alibaba Java Coding Guidelines”,查找,安装: ? 2.安装成功后,会提示重新启动一下IDEA,重启即生效! 二.RestfulToolkit 概

Java Stream &amp; Method Reference

目录 Java Stream & Method Reference 1. Stream流 1.1 概述 1.2 流式思想的概述 1.3 获取流 1.4 常用方法 1.5 练习:集合元素处理(传统方式) 1.6 练习:集合元素处理(Stream流方式) 2. 方法引用 2.1 基本介绍 2.2 通过对象名引用[成员方法] 2.3 通过类名称引用[静态方法] 2.4 通过super引用父类的普通成员方法 2.5 通过this引用本类的普通成员方法 2.6 类的构造器(构造方法)引用 2.7 数组的构