当前位置: 首页 > 工具软件 > Java8kanren > 使用案例 >

java8三次分组_Java8分组(groupingBy)

叶稳
2023-12-01

1、分组,计数,排序

public class Java8Example1 {

public static void main(String[] args) {

List items = Arrays.asList(

"apple", "apple",

"orange", "orange", "orange",

"blueberry",

"peach", "peach", "peach", "peach"

);

// 分组,计数

Map result = items.stream()

.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

System.out.println(result);

Map finalMap = new LinkedHashMap<>();

// 排序

result.entrySet().stream()

.sorted(Map.Entry.comparingByValue().reversed())

.forEachOrdered(e -> finalMap.put(e.getKey(), e.getValue()));

System.out.println(finalMap);

}

}

2、以下例子使用的类

public class Item {

private String name;

private int qty;

private BigDecimal price;

public Item() {

}

public Item(String name, int qty, BigDecimal price) {

this.name = name;

this.qty = qty;

this.price = price;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getQty() {

return qty;

}

public void setQty(int qty) {

this.qty = qty;

}

public BigDecimal getPrice() {

return price;

}

public void setPrice(BigDecimal price) {

this.price = price;

}

@Override

public String toString() {

return "Item{" +

"name='" + name + '\'' +

", qty=" + qty +

", price=" + price +

'}';

}

}

3、分组,计数,计算数量

public class Java8Example2 {

public static void main(String[] args) {

List items = Arrays.asList(

new Item("apple", 10, new BigDecimal(23.5)),

new Item("apple", 20, new BigDecimal(32.5)),

new Item("orange", 30, new BigDecimal(13.9)),

new Item("orange", 20, new BigDecimal(33.5)),

new Item("orange", 10, new BigDecimal(63.5)),

new Item("orange", 50, new BigDecimal(41.5)),

new Item("peach", 20, new BigDecimal(26.5)),

new Item("peach", 30, new BigDecimal(42.5)),

new Item("peach", 40, new BigDecimal(24.5)),

new Item("peach", 10, new BigDecimal(12.5))

);

// 分组,计数

Map counting = items.stream()

.collect(Collectors.groupingBy(Item::getName, Collectors.counting()));

System.out.println(counting);

// 分组,计数,数量

Map sum = items.stream()

.collect(Collectors.groupingBy(Item::getName, Collectors.summingInt(Item::getQty)));

System.out.println(sum);

}

}

4、通过价格分组

public class Java8Example3 {

public static void main(String[] args) {

List items = Arrays.asList(

new Item("apple", 10, new BigDecimal(23.5)),

new Item("apple", 20, new BigDecimal(32.5)),

new Item("orange", 30, new BigDecimal(13.9)),

new Item("orange", 20, new BigDecimal(32.5)),

new Item("orange", 10, new BigDecimal(63.5)),

new Item("orange", 50, new BigDecimal(41.5)),

new Item("peach", 20, new BigDecimal(26.5)),

new Item("peach", 30, new BigDecimal(32.5)),

new Item("peach", 40, new BigDecimal(24.5)),

new Item("peach", 10, new BigDecimal(12.5))

);

// 分组

Map> groupByPriceMap = items.stream()

.collect(Collectors.groupingBy(Item::getPrice));

System.out.println(groupByPriceMap);

// 分组 转化List->Set

Map> result = items.stream()

.collect(Collectors.groupingBy(Item::getPrice, Collectors.mapping(Item::getName, Collectors.toSet())));

System.out.println(result);

}

}

java8 先groupingBy 后map

Map> mapBanJI_UserNameList=list.stream().collect(Collectors.groupin ...

Java8 stream 中利用 groupingBy 进行多字段分组求和

Java8的groupingBy实现集合的分组,类似Mysql的group by分组功能,注意得到的是一个map 对集合按照单个属性分组 case1: List items ...

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

接上一篇:,下面继续接着讲Stream 5.流的中间操作 常见的流的中间操作,归为以下三大类:筛选和切片流操作.元素映射操作.元素排序操作: 操作 描述 ...

乐字节-Java8核心特性实战之Stream(流)

说起流,我们会想起手机 ,电脑组装流水线,物流仓库商品包装流水线等等.如果把手机 ,电脑,包裹看做最终结果的话,那么加工商品前的各种零部件就可以看做数据源,而中间一系列的加工作业操作,就可以看做流的处 ...

简洁又快速地处理集合——Java8 Stream(下)

上一篇文章我讲解 Stream 流的基本原理,以及它与集合的区别关系,讲了那么多抽象的,本篇文章我们开始实战,讲解流的各个方法以及各种操作 没有看过上篇文章的可以先点击进去学习一下 简洁又快速地处理集 ...

Java8初体验(二)Stream语法详解---符合人的思维模式,数据源--》stream--&gt&semi;干什么事(具体怎么做,就交给Stream)--》聚合

Function.identity()是什么? // 将Stream转换成容器或Map Stream stream = Stream.of("I", & ...

java8(2)--- Stream API

1.简述 Java8中有两大最为重要的改变.第一个是 Lambda 表达式:另外一 个就是 Stream API. Stream 是处理集合的抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复 ...

Java8 新特性之集合操作Stream

Java8 新特性之集合操作Stream Stream简介 Java 8引入了全新的Stream API.这里的Stream和I/O流不同,它更像具有Iterable的集合类,但行为和集合类又有所不同 ...

Lambda表达式例子

转 Lambda表达式例子 1.Java8 新特性介绍 写java的同学对java8肯定知道 那么java8到底有哪些特性呢,总结如下: Lambda表达式 函数式接口 Stream Optional ...

随机推荐

【笔记】js获取当前点击元素的索引

以前用jq 做过图片切换 滑动之类的特效现在想用js 试试是怎么一回事 jq图片切换的思路是用index()函数获取当前点击的按钮的索引然后根据索引值将对应索引的图片显示出来 于是查了一下js 是如何 ...

JAVA System&period;getProperty&lpar;&rpar; 与 System&period;getenv&lpar;&rpar; 差异及示例

System.getenv() 方法是获取指定的环境变量的值. System.getenv() 接收参数为任意字符串,当存在指定环境变量时即返回环境变量的值,否则返回null. System.getP ...

linux笔记2&period;19

压缩一般使用 tar -cvzf etcbackup.tar.gz  /etc 寻找文件 locate(快速查找:新添加的得用updatedb更新后才能找到) find:   find . -name ...

c&num;语言简介

语言的历史:c,c++,java,c#, c语言最早,c++语言复杂,而java把其中难的一部分去掉,也成为c--,而c#早期类似java. c#简单高效,并且与web结合. C#的运行环境是.net ...

&lbrack;Oracle维护工程师手记&rsqb;为什么flashback 的时候既需要 flashback log &comma;又需要 archive log&quest;

为什么flashback 的时候既需要 flashback log ,又需要 archive log 呢? 如果数据库的活动不是很频繁,可以看到,其flashback log 是比较小的.那么是通过怎 ...

用foobar进行码率转换 适用与sacd-r转成低码率

之前下载了不少高清音频,有黑胶转录的也有母带文件.这些高清音频大都是24bit,采样率96khz或者88.2khz或者更高.而我想将部分精品专辑刻录成cd.首先我需要将这些文件转换为16bit,44. ...

mosh

mosh 是一款使用 UDP 连接 C/S 的终端工具, 服务器只需安装好 mosh 套件, 并启动 SSH 服务, 等待 Client 连接即可. Client (mosh-client) 连接时, ...

导入numpy时,出错怎么解决?

在linux中导入numpy时出错,出现如下图所示的问题,采用更新版本的问题并未解决, 解决方法如下:进入文件夹中,删除其中的numpy文件夹,其他的文件夹不动,然后重新安装numpy即可

python第十六天&comma;昨天来晚了&comma;作业终于完成了

作业 1: 员工信息表程序,实现增删改查操作 可进行模糊查询,语法至少支持下面3种: select name,age from staff_table where age > 22 select ...

android onSaveInstance方法

为什么需要用到Activity状态保存, 如何用 ? 1)我们希望当前的Activity中的信息不会因为Activity状态的改变,而丢失.比如横竖屏的切换,突然来了个电话. 2) 借助Activit ...

 类似资料: