我就废话不多说了,大家还是直接看代码吧~

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 分组归类操作相关推荐

  1. 跟我学 Java 8 新特性之 Stream 流(三)缩减操作

    转载自   跟我学 Java 8 新特性之 Stream 流(三)缩减操作 和前面两篇文章一起服用,效果会更佳.通过对流API的基础体验Demo和关键知识点的讲解,相信大家对流API都有一定的认识了, ...

  2. Java学习day08--方法引用和Stream流

    Java学习day08--方法引用和Stream流 方法引用和Stream流 方法引用 获取Collection.Map.数组流 Stream流的常用操作方法 方法引用和Stream流 1).流思想: ...

  3. 【Java】函数式编程学习笔记——Stream流

    学习视频:https://www.bilibili.com/video/BV1Gh41187uR?p=1 (1)[Java]函数式编程学习笔记--Lambda表达式 (2)[Java]函数式编程学习笔 ...

  4. Java从入门到精通十七(Stream 流)

    Java从入门到精通十七(Stream 流 ) Stream 流引入说明 Stream 流的常用方法说明 1: filter() 2:collect() 3:distinct() 4:sorted() ...

  5. 二、使用Stream流的方式完成过滤操作

    package stream01;import java.util.ArrayList; import java.util.stream.Stream;/*** 使用Stream流的方式完成过滤操作* ...

  6. JDK1.8 Java8 Stream流 认知以及常见使用

    注意前提条件: 环境一定是JDK1.8 现在大部分都是1.8的环境,同样也要学习.使用.对其认知,可以使我们开发效率提高,不至于别人请教的时候不清楚. /*** @ClassName User* @D ...

  7. Java学习笔记---Lambda表达式及Stream流Api

    Lambda 特性: 允许把函数作为参数传递进方法. 前置条件: 必须是函数式接口---------->[函数式接口:满足以下三条1.接口中只有一个抽象方法.2.可以有默认实现的方法.3.可以有 ...

  8. Java JDK 1.8 新特性 Stream流

    Stream流 stream流与IO流没有任何关系,stream流类似车间的生产线,对数据进行加工,不存储数据 获取Stream流的两种方式 public class StreamIntro {pub ...

  9. JAVA学习-Stream流的生成、中间操作、终结、收集操作

    Stream流的使用-用于数据集的过滤.映射 1.生成流的操作:通过数据源.集合生成流list.stream() 2.中间操作:一个流可以跟随零个或多个中间操作,其目的主要是打开流,做出某种程度的数据 ...

最新文章

  1. Melkman's Algorithm
  2. rhel6用centos163 yum源
  3. 我潜入清华神秘实验室,用脑机接口写了两句诗
  4. Answer:关于C#连续赋值的面试题
  5. couchdb 任意命令执行漏洞(cve-2017-12636)
  6. javaGUI猜生日游戏
  7. JavaWeb(part2)--request
  8. linux远程工具自动记住密码,linux – 如何记住/缓存或指定Ansible的私钥密码
  9. Django ORM 知识点总结
  10. DML和DDL含义和区别-一定要搞明白
  11. 策略人员平常的工作都有哪一些?
  12. python发送微信消息_python 发送QQ或者微信消息
  13. android mvp模式例子_[Android] MVP设计模式及实例
  14. ftp连接服务器连接不上,xshell可以连接上
  15. 新手怎么在GitHub上传代码?----最新教程
  16. uniapp 安卓 长按app 快捷方式 shortcut
  17. 如何开启红米手机4X的ROOT超级权限
  18. 为网站添加视频、音乐
  19. 深圳东西冲穿越游玩攻略
  20. 万马齐喑究可哀-中文编程的又一波讨论

热门文章

  1. 让引擎不再是你的唯一,对百度再见
  2. Unity自带网络功能——NetworkView组件、Serialize、RPC
  3. 实例化Model的三种方式
  4. AcWing--2.01背包问题
  5. 雷赛运动控制卡能不能用c语言_基于PMAC控制卡的三坐标测量机控制系统
  6. Ubuntu 16.04 安装 Matlab2016a
  7. vscode怎么安装python包_vscode如何安装python
  8. html异形轮播,异形滚动
  9. 语句中如何结束本循环进入下一循环_Python3基础语法(八)--控制循环 while...
  10. [matlab]斜阶梯式长条引起的重力异常计算