Java8 新方法之 Stream(一)

Java8中的steram仅仅代表着数据流,与InputStream,OutPutStream是完全不同的概念。这里的stream是对集合(collection)功能的增强,更专注于对集合对象的各种便利、高效的聚合,大批量数据操作。

collec()函数

将stream返回的元素拼成ArrayList。参数为Collectros接口,提供极大的便利

 <R, A> R collect(Collector<? super T,A, R> collector);

解析:函数为泛型方法

参数为泛型约束,只能是某一类型的父类

参数Colector接口

除了toList(),toSet(),toMap(),还有joing()拼接字符串,groupingby等方法

Colector方法 groupingBy基本分组

使用:我们用groupingBy方法将人群按年龄分组

Map(Integer,List<Person>)personAge=people.stream().collect(collectros.groupingBy(Person::getAge));

Person::getAge为方法引用,返回某个属性的值。这里看起来横向C++的函数作用域呀。其实groupingBy()接受一个lambda表达式

collect(Collectors.groupingBy(p->p.getAge))

gruoppingBy有多种重载,其中一个是带有收集器的,将分组的数据按指定条件收集

groupingBy 选择分组

使用:我们将分组的数据,只获取其中的名称

Map(Integer,List<string> nameofAge=people.stream().collect(groupingBy(Person::getAge,Mapping(Person::getName,toList())));
System.out.println("People grouped by age: " + nameOfPeopleByAge);

解析:两个参数:第一个是年龄,分组条件,第二个是收集期,mapping函数返回结果,mapping连个参数,分别是映射的属性和收集到的地方,如list或set

输出的结果为

People grouped byage: {35=[Greg], 20=[John], 21=[Sara, Jane]}

小结:

通过查看源码我们发现groupingBy的参数为function<T,R>函数接口,该函数的操作是接收参数为T,返回R类型的操作,说白了就是一个func的泛型委托,参数为T,返回为T,和NET中的func是一个效果,很大程度上简化了代码书写度

时间: 2024-09-29 10:09:24

Java8 新方法之 Stream(一)的相关文章

JAVA8新特性之 Stream API

重要的 Stream API  : java.util.Stream.* Stream提供了一种高效且简易处理数据的方式 注意:1.Stream自己不会存储元素 2.对Stream进行操作不会改变数据源,相反,会产生一个执有结果的新Stream 3.Stream操作是延迟执行的.只有进行了终止操作才会产生结果 (并行流就是把内容分成多个数据块,并用不同的线程分别处理每个数据块.在Java8 后,Stream API可以声明性的通过parallel()与sequential()在并行流与串行流(顺

java8新特性(Stream API)

Stream API的操作步骤: 1.创建Stream 2.中间操作 3.终止操作(终端操作) //1. 创建 Stream @Test public void test1(){ //1. Collection 提供了两个方法 stream() 与 parallelStream() List<String> list = new ArrayList<>(); Stream<String> stream = list.stream(); //获取一个顺序流 Stream&

乐字节-Java8新特性-接口默认方法之Stream流(下)

接上一篇:<Java8新特性之stream>,下面继续接着讲Stream 5.流的中间操作 常见的流的中间操作,归为以下三大类:筛选和切片流操作.元素映射操作.元素排序操作: 操作 描述 筛选和切片 filter(T -> boolean):保留 boolean 为 true 的元素 limit(long n):返回前 n 个元素 skip(long n):去除前 n 个元素 distinct():去除重复元素,这个方法是通过类的 equals 方法来判断两个元素是否相等的 映射 map

java8 新特性 Stream

1. Stream初体验 我们先来看看Java里面是怎么定义Stream的: A sequence of elements supporting sequential and parallel aggregate operations. 我们来解读一下上面的那句话: Stream是元素的集合,这点让Stream看起来用些类似Iterator: 可以支持顺序和并行的对原Stream进行汇聚的操作: 大家可以把Stream当成一个高级版本的Iterator.原始版本的Iterator,用户只能一个一

Java8新特性(一)_interface中的static方法和default方法

为什么要单独写个Java8新特性,一个原因是我目前所在的公司用的是jdk8,并且框架中用了大量的Java8的新特性,如上篇文章写到的stream方法进行过滤map集合.stream方法就是接口Collection中的default方法.所以准备专门写写关于java8新特性的文章,虽然现在10已经发布了.但还是要认真的去了解下新版本的变化. static方法 java8中为接口新增了一项功能:定义一个或者更多个静态方法.用法和普通的static方法一样. 代码示例 public interface

Java8 新特性之集合操作Stream

Java8 新特性之集合操作Stream Stream简介 Java 8引入了全新的Stream API.这里的Stream和I/O流不同,它更像具有Iterable的集合类,但行为和集合类又有所不同. stream是对集合对象功能的增强,它专注于对集合对象进行各种非常便利.高效的聚合操作,或者大批量数据操作. 为什么要使用Stream 函数式编程带来的好处尤为明显.这种代码更多地表达了业务逻辑的意图,而不是它的实现机制.易读的代码也易于维护.更可靠.更不容易出错. 高端 使用实例: 测试数据:

JAVA8新特性--集合流操作Stream

原文链接:https://blog.csdn.net/bluuusea/article/details/79967039 Stream类全路径为:java.util.stream.Stream 对Stream的描述,引用其他文章中觉得比较好的介绍: Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利.高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation).Strea

Java8 新特性 Stream 无状态中间操作

无状态中间操作 Java8 新特性 Stream 练习实例 中间无状态操作,可以在单个对单个的数据进行处理.比如:filter(过滤)一个元素的时候,也可以判断,比如map(映射)... 过滤 filter 映射 map 扁夹化 flatMap 遍厉 peek 过滤 filter 接收一个谓词断言,boolean Pridicate< T > 根据返回值类型来确定是否过滤这一条属性. // 过滤 filter @Test public void filterTest() { list.stre

Java8 新特性 Stream 短路终端操作

短路终端操作 Java8 新特性 Stream 练习实例 传入一个谓词,返回传为boolean,如果符合条件,则直接结束流. 匹配所有 allMatch 任意匹配 anymMatch 不匹配 noneMatch 查找首个 findFirst 查找任意 findAny 匹配所有 allMatch //匹配所有 allMatch @Test public void allMatchTest() { boolean b = list.stream() //所有的商品价格都大于40 .allMatch(