java 1.8stream_java jdk1.8 使用stream流进行list 分组归类操作
我就废话不多说了,大家还是直接看代码吧~
import com.alibaba.fastjson.JSON;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author czw
*/
public class Foo{
private String name;
private String type;
private Double typeValue;
private Integer count;
public Foo(String name, String type, Double typeValue, Integer count) {
this.name = name;
this.type = type;
this.typeValue = typeValue;
this.count = count;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Double getTypeValue() {
return typeValue;
}
public void setTypeValue(Double typeValue) {
this.typeValue = typeValue;
}
public Integer getCount() {
return count;
}
public void setCount(Integer count) {
this.count = count;
}
@Override
public String toString() {
return "Foo{" +
"name='" + name + '\'' +
", type='" + type + '\'' +
", typeValue=" + typeValue +
", count=" + count +
'}';
}
public static void main(String[] args) {
List fooList = new ArrayList();
fooList.add(new Foo("A","san",1.0,2)) ;
fooList.add( new Foo("A","nas",13.0,1)) ;
fooList.add(new Foo("B","san",112.0,3)) ;
fooList.add(new Foo("C","san",43.0,5)) ;
fooList.add(new Foo("B","nas",77.0,7)) ;
List> groupList = new ArrayList<>();
fooList.stream()
.collect(Collectors.groupingBy(Foo::getName,Collectors.toList()))
.forEach((name,fooListByName)->{
groupList.add(fooListByName);
});
System.out.println(JSON.toJSONString(groupList));
}
}
输出结果
[
[{
"count": 2,
"name": "A",
"type": "san",
"typeValue": 1
}, {
"count": 1,
"name": "A",
"type": "nas",
"typeValue": 13
}],
[{
"count": 3,
"name": "B",
"type": "san",
"typeValue": 112
}, {
"count": 7,
"name": "B",
"type": "nas",
"typeValue": 77
}],
[{
"count": 5,
"name": "C",
"type": "san",
"typeValue": 43
}]
]
补充知识:java jdk1.8的stream复杂和简单的分组
获取List对象中的某个参数时:
List> param = new ArrayList<>();
Map map = new HashMap<>();
map.put("id","1213");
map.put("name","test");
List strList = param.stream().map(key ->key.get("name")).collect(Collectors.toList());
简单参数分组:
List damoformList = new ArrayList<>();
Map>> collect = damoformList.stream()
.collect(Collectors.groupingBy(DamoForm::getId()))
.entrySet()
.stream()
.collect(Collectors.toMap(
entry -> entry.getKey(),
entry -> entry.getValue().stream().collect(Collectors.groupingBy(DamoForm::getName()))
));
针对List复杂排序,多个条件进行排序:
应用场景:针对List中某个字段的数据进行双重倒序的方式排序,代码有点复杂,不明白的可以留言。
List damoformList = new ArrayList<>();
List> result = damoformList.stream()
.collect(Collectors.groupingBy(DamoForm::getPartClass))
.entrySet()
.stream()
.sorted((o1, o2) -> {
/*
* 这里排序,任何有1的排在前,全部是0排在后
*/
Integer sort1 = o1.getValue().stream().anyMatch(item -> item.getIsFlag() > 0) ? -1 : 1;
Integer sort2 = o2.getValue().stream().anyMatch(item -> item.getIsFlag() > 0) ? -1 : 1;
return sort1.compareTo(sort2);
})
.map(entry -> {
Map map = Maps.newHashMapWithExpectedSize(2);
map.put("repairItemTypeName", entry.getKey());
/*
* 这里排序,1排在前,0排在后
*/
List damoVOList = entry.getValue().stream()
.sorted(Comparator.comparingInt(o -> (o.getIsFlag() * -1)))
.collect(Collectors.toList());
map.put("repairTypeList", itemDescFormList);
return map;
})
.collect(Collectors.toList());
以上这篇java jdk1.8 使用stream流进行list 分组归类操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持龙方网络。
java 1.8stream_java jdk1.8 使用stream流进行list 分组归类操作相关推荐
- 跟我学 Java 8 新特性之 Stream 流(三)缩减操作
转载自 跟我学 Java 8 新特性之 Stream 流(三)缩减操作 和前面两篇文章一起服用,效果会更佳.通过对流API的基础体验Demo和关键知识点的讲解,相信大家对流API都有一定的认识了, ...
- Java学习day08--方法引用和Stream流
Java学习day08--方法引用和Stream流 方法引用和Stream流 方法引用 获取Collection.Map.数组流 Stream流的常用操作方法 方法引用和Stream流 1).流思想: ...
- 【Java】函数式编程学习笔记——Stream流
学习视频:https://www.bilibili.com/video/BV1Gh41187uR?p=1 (1)[Java]函数式编程学习笔记--Lambda表达式 (2)[Java]函数式编程学习笔 ...
- Java从入门到精通十七(Stream 流)
Java从入门到精通十七(Stream 流 ) Stream 流引入说明 Stream 流的常用方法说明 1: filter() 2:collect() 3:distinct() 4:sorted() ...
- 二、使用Stream流的方式完成过滤操作
package stream01;import java.util.ArrayList; import java.util.stream.Stream;/*** 使用Stream流的方式完成过滤操作* ...
- JDK1.8 Java8 Stream流 认知以及常见使用
注意前提条件: 环境一定是JDK1.8 现在大部分都是1.8的环境,同样也要学习.使用.对其认知,可以使我们开发效率提高,不至于别人请教的时候不清楚. /*** @ClassName User* @D ...
- Java学习笔记---Lambda表达式及Stream流Api
Lambda 特性: 允许把函数作为参数传递进方法. 前置条件: 必须是函数式接口---------->[函数式接口:满足以下三条1.接口中只有一个抽象方法.2.可以有默认实现的方法.3.可以有 ...
- Java JDK 1.8 新特性 Stream流
Stream流 stream流与IO流没有任何关系,stream流类似车间的生产线,对数据进行加工,不存储数据 获取Stream流的两种方式 public class StreamIntro {pub ...
- JAVA学习-Stream流的生成、中间操作、终结、收集操作
Stream流的使用-用于数据集的过滤.映射 1.生成流的操作:通过数据源.集合生成流list.stream() 2.中间操作:一个流可以跟随零个或多个中间操作,其目的主要是打开流,做出某种程度的数据 ...
最新文章
- Melkman's Algorithm
- rhel6用centos163 yum源
- 我潜入清华神秘实验室,用脑机接口写了两句诗
- Answer:关于C#连续赋值的面试题
- couchdb 任意命令执行漏洞(cve-2017-12636)
- javaGUI猜生日游戏
- JavaWeb(part2)--request
- linux远程工具自动记住密码,linux – 如何记住/缓存或指定Ansible的私钥密码
- Django ORM 知识点总结
- DML和DDL含义和区别-一定要搞明白
- 策略人员平常的工作都有哪一些?
- python发送微信消息_python 发送QQ或者微信消息
- android mvp模式例子_[Android] MVP设计模式及实例
- ftp连接服务器连接不上,xshell可以连接上
- 新手怎么在GitHub上传代码?----最新教程
- uniapp 安卓 长按app 快捷方式 shortcut
- 如何开启红米手机4X的ROOT超级权限
- 为网站添加视频、音乐
- 深圳东西冲穿越游玩攻略
- 万马齐喑究可哀-中文编程的又一波讨论
热门文章
- 让引擎不再是你的唯一,对百度再见
- Unity自带网络功能——NetworkView组件、Serialize、RPC
- 实例化Model的三种方式
- AcWing--2.01背包问题
- 雷赛运动控制卡能不能用c语言_基于PMAC控制卡的三坐标测量机控制系统
- Ubuntu 16.04 安装 Matlab2016a
- vscode怎么安装python包_vscode如何安装python
- html异形轮播,异形滚动
- 语句中如何结束本循环进入下一循环_Python3基础语法(八)--控制循环 while...
- [matlab]斜阶梯式长条引起的重力异常计算