首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java8 Stream groupingBy对List进行分组

其实Java8 Streams API中Collector也支持流中数据进行分组和分区操作,本片文章讲简单介绍一下,如何使用groupingBy 和 partitioningBy来对流中元素进行分组和分区...groupingBy 首先看一下Java8之前如果想对一个List做分组操作,我们需要如下代码操作: @Test public void groupListBeforeJava8() { Map...中StreamgroupingBy分组器,就可以这样操作: /** * 使用java8 stream groupingBy操作,按城市分组list */ @Test public void groupingByTest...分组器最常见一个用法,下面简单介绍一下其他用法: 统计每个分组count /** * 使用java8 stream groupingBy操作,按城市分组list统计count */ @Test...示例代码:卓立 – 码云 – groupingBy操作 参考链接: Java 8 Streams API:对Stream分组和分区 Java 8 – Stream Collectors groupingBy

3.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

使用 Stream API 高逼格 优化 Java 代码!

Java8新特性主要是Lambda表达式和流,当流和Lambda表达式结合起来一起使用时,因为流申明式处理数据集合特点,可以让代码变得简洁易读 放大招,流如何简化代码 如果有一个需求,需要对数据库查询到菜肴进行一个处理...该例子完成中String -> Integer映射之前上面的例子通过map方法完成了Dish->String映射 flatMap流转换 将一个流中每个都转换为另一个流 List...提供findAny方法是为了更好利用并行流,findFirst方法并行上限制更多【本篇文章将不介绍并行流】 reduce将流中元素组合起来 假设我们对一个集合中进行求和 jdk8之前 int ...groupingBy进行分组,其中groupingBy方法参数为分类函数。...讲道理没学Stream API之前,谁要是给我应用里写很多Lambda,Stream API,飞起就想给他一脚。

2.1K30

使用 Stream API 高逼格 优化 Java 代码!

Java8新特性主要是Lambda表达式和流,当流和Lambda表达式结合起来一起使用时,因为流申明式处理数据集合特点,可以让代码变得简洁易读 放大招,流如何简化代码 如果有一个需求,需要对数据库查询到菜肴进行一个处理...该例子完成中String -> Integer映射之前上面的例子通过map方法完成了Dish->String映射 flatMap流转换 将一个流中每个都转换为另一个流 List...提供findAny方法是为了更好利用并行流,findFirst方法并行上限制更多【本篇文章将不介绍并行流】 reduce将流中元素组合起来 假设我们对一个集合中进行求和 jdk8之前 int...groupingBy进行分组,其中groupingBy方法参数为分类函数。...讲道理没学Stream API之前,谁要是给我应用里写很多Lambda,Stream API,飞起就想给他一脚。

1.9K10

巧用 Java 8 Stream 来优化代码

Java8新特性主要是Lambda表达式和流,当流和Lambda表达式结合起来一起使用时,因为流申明式处理数据集合特点,可以让代码变得简洁易读 放大招,流如何简化代码 如果有一个需求,需要对数据库查询到菜肴进行一个处理...,该例子完成中String -> Integer映射之前上面的例子通过map方法完成了Dish->String映射 flatMap流转换 将一个流中每个都转换为另一个流 List<String...提供findAny方法是为了更好利用并行流,findFirst方法并行上限制更多【本篇文章将不介绍并行流】 reduce将流中元素组合起来 假设我们对一个集合中进行求和 jdk8之前 int...进行分组 Map> result = dishList.stream().collect(groupingBy(Dish::getType)); collect...方法中传入groupingBy进行分组,其中groupingBy方法参数为分类函数

17410

使用 Stream API 高逼格 优化 Java 代码!

Java8新特性主要是Lambda表达式和流,当流和Lambda表达式结合起来一起使用时,因为流申明式处理数据集合特点,可以让代码变得简洁易读 放大招,流如何简化代码 如果有一个需求,需要对数据库查询到菜肴进行一个处理...,该例子完成中String -> Integer映射之前上面的例子通过map方法完成了Dish->String映射 flatMap流转换 将一个流中每个都转换为另一个流 List<String...提供findAny方法是为了更好利用并行流,findFirst方法并行上限制更多【本篇文章将不介绍并行流】 reduce将流中元素组合起来 假设我们对一个集合中进行求和 jdk8之前 int...groupingBy进行分组,其中groupingBy方法参数为分类函数。...讲道理没学Stream API之前,谁要是给我应用里写很多Lambda,Stream API,飞起就想给他一脚。

1.7K20

使用 Stream API 高逼格 优化 Java 代码

Java8新特性主要是Lambda表达式和流,当流和Lambda表达式结合起来一起使用时,因为流申明式处理数据集合特点,可以让代码变得简洁易读 放大招,流如何简化代码 如果有一个需求,需要对数据库查询到菜肴进行一个处理...map ( String :: length ); 通过map方法可以完成映射,该例子完成中String -> Integer映射之前上面的例子通过map方法完成了Dish->String...提供findAny方法是为了更好利用并行流,findFirst方法并行上限制更多【本篇文章将不介绍并行流】 reduce将流中元素组合起来 假设我们对一个集合中进行求和 jdk8之前 int...collect ( groupingBy ( Dish :: getType )); collect方法中传入groupingBy进行分组,其中groupingBy方法参数为分类函数。...讲道理没学Stream API之前,谁要是给我应用里写很多Lambda,Stream API,飞起就想给他一脚。

9810

使用 Stream API 高逼格 优化 Java 代码!

该例子完成中String -> Integer映射之前上面的例子通过map方法完成了Dish->String映射 flatMap流转换 将一个流中每个都转换为另一个流 List...提供findAny方法是为了更好利用并行流,findFirst方法并行上限制更多【本篇文章将不介绍并行流】 reduce将流中元素组合起来 假设我们对一个集合中进行求和 jdk8之前   int...进行分组 Map> result = dishList.stream().collect(groupingBy(Dish::getType)); collect方法中传入...groupingBy进行分组,其中groupingBy方法参数为分类函数。...讲道理没学Stream API之前,谁要是给我应用里写很多Lambda,Stream API,飞起就想给他一脚。我想,我现在可能爱上他了【嘻嘻】。

83830

Stream API 学会这样用,简化代码真牛批!

该例子完成中String -> Integer映射之前上面的例子通过map方法完成了Dish->String映射 flatMap流转换 将一个流中每个都转换为另一个流 List...提供findAny方法是为了更好利用并行流,findFirst方法并行上限制更多【本篇文章将不介绍并行流】 reduce将流中元素组合起来 假设我们对一个集合中进行求和 jdk8之前 int...> result = dishList.stream().collect(groupingBy(Dish::getType)); collect方法中传入groupingBy...进行分组,其中groupingBy方法参数为分类函数。...讲道理没学Stream API之前,谁要是给我应用里写很多Lambda,Stream API,飞起就想给他一脚。 我想,我现在可能爱上他了【嘻嘻】。

1.4K11

如何亮剑】用例子来学习Stream

1引言 先从一个例子开始,看看为什么Java8中要引入流(Stream)? 比如实现这么一个需求:在学生集合中查找男生数量。...输出: [1, 2, 3, 4] 4有状态转换 在前面介绍函数中,无论是map还是filter,都不会改变流状态,也即结果并不依赖之前元素。...Optional主要作用是对结果进行了封装,结果可能有,也可能没有,并且对结果可以进行后续处理,比如添加默认映射其他,抛出异常等。...虽然可以单独Collect()方法中使用,但实际却很少这样用(毕竟Stream本身也提供了类似的方法),它更常用用法是配合groupingBy()方法一起使用,以便对分组后数据进行二次加工。...之前也提过,groupingBy函数可以配合聚合函数做更复杂操作。下面介绍几种常见使用场景: 按照城市所在州进行分组,再统计数量。

83220

Java8_03_流

相反, 集合则是空间( 这里就是计算机内存) 中分布一组一个时间点上全体存在—— 你可以 使用迭代器来访问 for- each 循环中内部成员。...相反, Streams 库使用内部迭代—— 它帮你把迭代做了, 还把得到存在了某个地方, 你只要给出一个 函数说要干什么就可以了。...它可接受一个把对象映射为求和所需int函数,并返回一个收集器;该收集器传递给普通collect方法后即执行我们需要汇总操作。...: 遍历流时,会把每一道菜都映射为其热量,然后把这个数字累加到一个累加器(这里初始0)。...如图6-4所示,分组操作结果是一个Map,把分组函数返回作为映射键,把流中所有具有这个分类项目的列表作为对应映射

50820

Java开发之Java8 新特性--流式数据处理学习

流式处理简介 我接触到java8流式处理时候,我第一感觉是流式处理让集合操作变得简洁了许多,通常我们需要多行代码才能完成操作,借助于流式处理可以一行中实现。...比如我们希望对一个包含整数集合中筛选出所有的偶数,并将其封装成为一个新List返回,那么java8之前,我们需要通过如下代码实现: List evens = new ArrayList...2.2 映射 SQL中,借助SELECT关键字后面添加需要字段名称,可以仅输出我们需要字段数据,而流式处理映射操作也是实现这一目的,java8流式处理中,主要包含两类映射操作:map和flatMap...一级分组,按学校 Collectors.groupingBy(Student::getMajor))); // 二级分组,按专业 实际上groupingBy第二个参数不是只能传递...启动并行流式处理虽然简单,只需要将stream()替换成parallelStream()即可,但既然是并行,就会涉及到多线程安全问题,所以启用之前要先确认并行是否值得(并行效率不一定高于顺序执行),

1.7K20

Java8-Collect收集Stream

返回Collector泛型列表中间,这个表示容器类型,一个收集器当然需要一个容器来存放数据。这里?则表示容器类型不确定。事实上,在这里容器就是U[]。...关于参数: identity是返回类型初始,可以理解为累加器起点。 mapper则是map作用,意义在于将Stream流转换成你想要类型流。 op则是核心函数,作用是如何处理两个变量。...Java里, 如果按照指令式风格(手动写循环)方式,将会非常繁琐,容易出错。而Java8则提供了函数式解法。 比如,将dish按照type分组。...(真的不想搞Java8函数式学习了,感觉到处都是性能问题坑) 继续数据库sql映射,分组求和select sum(score) from table a group by Type Map<Type,...这个方法接收两个参数:一个函数对流中元素做变换,另一个则将变换结果对象收集起来。其目的是累加之前对每个输入元素应用一个映射函数,这样就可以让接收特定类型元素收集器适应不同类型对象。

2.5K50

酷炫 Stream API 最佳指南

内部迭代:以前对集合遍历都是通过Iterator或者For-Each方式, 显式集合外部进行迭代,这叫做外部迭代。Stream提供了内部迭代方式,通过访问者模式(Visitor)实现。...通过函数生成,iterate和generate两个静态方法从函数中生成流 iterator: iterate方法接受两个参数,第一个为初始化,第二个为进行函数操作,因为iterator生成流为无限流...> Integer映射之前上面的例子通过 map 方法完成了 Invoice -> String 映射 flatMap流转换 将一个流中每个都转换为另一个流 List wordList...提供findAny方法是为了更好利用并行流,findFirst方法并行上限制更多【本篇文章将不介绍并行流】 reduce将流中元素组合起来 假设我们对一个集合中进行求和 jdk8 之前 int...(Invoice::getType)); collect方法中传入groupingBy进行分组,其中groupingBy方法参数为分类函数

1.8K10

我愿称 Java8 Stream API 为 Java 之神!

更多关于 Lambda 函数式编程请移步至 #公众号:一个正经程序员 文章:一篇文章教会你使用 Java8 Lambda 表达式 01 简介 Stream API 是 Java 8 中加入一套新... Java 中,集合是一种数据结构,或者说是一种容器,用于存放数据,流不是容器,它不关心数据存放,只关注如何处理。...归约和汇总 我们使用前面归约操作中计算图书总价,最大,最小,输入总数那个例子来看看收集器如何进行上述归约操作: // 求和 long count = books.stream().collect(...() .collect(groupingBy(Book::getPublisher, counting())); 还可以进行分组后获取每组中价格最高图书: Map<String, Book...Java 7 之前,处理并行数据集合非常麻烦,首先需要将一个庞大数据集合分成几个子集合;然后需要为每一个子集合编写多线程处理程序,还需要对他们做线程同步来避免访问共享变量导致处理结果不准确;最后,等待所有线程处理完毕后将处理结果合并

27220

java8实战:使用流收集数据之toList、joining、groupBy(多字段分组)

java8专栏目录: java8实战读书笔记:Lambda表达式语法与函数式编程接口 java8实战读书笔记:复合Lambda表达式 java8实战读书笔记:初识Stream、流基本操作(流计算) java8...方法实现原理已经 java8读书笔记:探究java8流收集数据原理中也详细介绍,故本篇不再重点介绍。...那如何使用java8流分组特性来编写对应代码呢?下面的思考过程非常关键,经过前面的学习,我想大家应该也具备了如下分析与编写能力?...首先其声明如下:public static Collector>> groupingBy(Function classifier),那本例中,T,K这两个参数代表什么意思呢?...代码@2:调用groupingBy重载方法,传入参数为toList(),有点意思,传入参数为Collectors.toList(),结合上文中示例,需要返回类为:Map< String, List

9.2K41

Java 8 - 收集器Collectors_分组groupingBy

如下图所示,分组操作结果是一个 Map ,把分组函数返回作为映射键,把流中所有具有这个分类项目的列表作为对应映射。 ?...菜单分类例子中,键就是菜类型,就是包含所有对应类型列表。 ---- 【第二个例子】 但是,分类函数不一定像方法引用那样可用,因为你想用以分类条件可能比简单属性访问器要复杂。...这个收集器相当于旧收集器一个包装, collect 操作最后一步就是将返回用转换函数做一个映射。...这个方法接受两个参数: 一个函数对流中元素做变换 另一个则将变换结果对象收集起来 其目的是累加之前对每个输入元素应用一个映射函数,这样就可以让接受特定类型元素收集器适应不同类型对象。...List 中,以便仅保留各不相同

4.1K41
领券