import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set; public class ListSort { /**
* 按照List<Map<String,Object>>里面map的某个value重新封装成多个不同的list, 原始数据类型List<Map
* <String,Object>>, 转换后数据类型Map<String,List<Map<String,Object>>>
*
* @param list
* @param oneMapKey
* @return
*/
private static Map<String, Object> change(List<Map<String, Object>> list, String oneMapKey) {
Map<String, Object> resultMap = new HashMap<String, Object>();
Set<Object> setTmp = new HashSet<Object>();
for (Map<String, Object> tmp : list) {
setTmp.add(tmp.get(oneMapKey));
}
Iterator<Object> it = setTmp.iterator();
while (it.hasNext()) {
String oneSetTmpStr = (String) it.next();
List<Map<String, Object>> oneSetTmpList = new ArrayList<Map<String, Object>>();
for (Map<String, Object> tmp : list) {
String oneMapValueStr = (String) tmp.get(oneMapKey);
if (oneMapValueStr.equals(oneSetTmpStr)) {
oneSetTmpList.add(tmp);
}
}
resultMap.put(oneSetTmpStr, oneSetTmpList);
}
return resultMap;
} /**
* 按照List<Map<String,Object>>里面map的某个value重新封装成多个不同的list, 原始数据类型List<Map
* <String,Object>>, 转换后数据类型Map<String,List<Map<String,Object>>>
*
* @param list
* @param oneMapKey
* @return
*/
private static List<Map<String, Object>> change2(List<Map<String, Object>> inList, String oneMapKey,
List<Map<String, Object>> outList) {
// 1.将某个key的值存在set中
Set<Object> setTmp = new HashSet<Object>();
for (Map<String, Object> tmp : inList) {
setTmp.add(tmp.get(oneMapKey));
}
// 2.遍历set
Iterator<Object> it = setTmp.iterator();
while (it.hasNext()) {
String oneMapValueStr = "";
String oneSetTmpStr = (String) it.next();
Map<String, Object> oneSetTmpMap = new HashMap<String, Object>();
List<Map<String, Object>> oneSetTmpList = new ArrayList<Map<String, Object>>(); for (Map<String, Object> tmp : inList) {
oneMapValueStr = (String) tmp.get(oneMapKey);
if (oneSetTmpStr.equals(oneMapValueStr)) {
oneSetTmpMap.put("text", oneSetTmpStr);
oneSetTmpList.add(tmp);
}
}
oneSetTmpMap.put("array", oneSetTmpList);
outList.add(oneSetTmpMap);
}
return outList;
} public static void main(String[] args) {
Map<String, Object> map1 = new HashMap<String, Object>();
Map<String, Object> map2 = new HashMap<String, Object>();
Map<String, Object> map3 = new HashMap<String, Object>();
Map<String, Object> map4 = new HashMap<String, Object>(); List<Map<String, Object>> inList = new ArrayList<Map<String, Object>>();
map1.put("id", "111");
map1.put("name", "tom");
map1.put("sex", "male"); map2.put("id", "222");
map2.put("name", "jack");
map2.put("sex", "male"); map3.put("id", "333");
map3.put("name", "lucy");
map3.put("sex", "female"); map4.put("id", "444");
map4.put("name", "lucy");
map4.put("sex", "female"); inList.add(map1);
inList.add(map2);
inList.add(map3);
inList.add(map4);
System.out.println("原始inList:" + inList); Map<String, Object> resultMap = new HashMap<String, Object>();
// resultMap = change(list, "sex");
resultMap = change(inList, "name");
System.out.println("按照map中的某个值重新封装后的resultMap:" + resultMap); List<Map<String, Object>> outList = new ArrayList<Map<String, Object>>();
System.out.println("retList==1==:" + outList);
outList = change2(inList, "name", outList);
System.out.println("retList==2==:" + outList); }
}


//根据设备名称进行分组
Map<String, List<ModuleStatisticDetail>> collect = moduleStatisticDetails.stream()
.collect(Collectors.groupingBy(ModuleStatisticDetail::getDeviceTypeName)); 复制代码
/**
* 使用jdk1.8 lamada表达式排序 倒序排列
*/
list=list.stream().sorted(Comparator.comparing(SortBean::getT1).reversed()).collect(Collectors.toList());
for (SortBean sortBean : list) {
System.out.println(sortBean);
}
复制代码

java中对list集合中的数据按照某一个属性进行分组的更多相关文章

  1. 关于java中对list集合中的数据按照某一个属性进行分组

    有的时候,我们需要在java中对集合中的数据进行分组运算. 例如:Bill对象有money(float)和type(String)属性,现有个集合List<Bill>,需要按照Bill的t ...

  2. List集合中的数据按照某一个属性进行分组

    有的时候,我们需要在java中对集合中的数据进行分组运算.例如:Bill对象有money(float)和type(String)属性,现有个集合List<Bill>,需要按照Bill的ty ...

  3. 使用Java Stream,提取集合中的某一列/按条件过滤集合/求和/最大值/最小值/平均值

    不得不说,使用Java Stream操作集合实在是太好用了,不过最近在观察生产环境错误日志时,发现偶尔会出现以下2个异常: java.lang.NullPointerException java.ut ...

  4. java如何对List集合中的元素进行排序(请收藏)

    在java开发中有时候我们需要对List集合中的元素按照一定的规则进行排序,比如说有个Person的集合,我们要根据Person的age属性进行排序输出,这就需要用到Java中提供的对集合进行操作的工 ...

  5. java代码实现将集合中的重复元素去掉

    package com.loaderman.test; import java.util.ArrayList; import java.util.LinkedHashSet; import java. ...

  6. java:替换List集合中的某个任意值(对象)

    定义replaceAll方法,将传入的新值替换集合中的老值(list,old,new) private static <E> void replaceAll(List<E> l ...

  7. 19SpringMvc_在业务控制方法中收集List集合中包含JavaBean参数

    本文要实现的功能是给一张表单:

  8. redis中插入用户集合的语句,有四个属性

    一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 ...

  9. 【java基础 17】集合中各实现类的性能分析

    大致的再回顾一下java集合框架的基本情况 一.各Set实现类的性能分析 1.1,HashSet用于添加.查询 HashSet和TreeSet是Set的两个典型实现,HashSet的性能总是比Tree ...

随机推荐

  1. Lsi卡和IB卡在CentOS中升级

    LSI 9271 步骤1:准备升级工具和固件包 rpm -ivh MegaCli-8.07.14-1.noarch.rpm [root@phegdata01 ~]# unzip 23-34-0-000 ...

  2. 08_UI控件

    uiControl整体界面如下图所示,按照视频教程,学习控件由于是初学,都是最基础知识.还有ImageSwitcher.Gallery未更新,o(╯□╰)o 1 package com.example ...

  3. BootstrapBlazor 组件库介绍

    项目介绍 演示系统地址:https://www.blazor.zone Blazor 是一个使用 .NET 生成交互式客户端 Web UI 的框架: 使用 C# 代替 JavaScript 来创建丰富 ...

  4. SQL Server 索引碎片整理

    索引碎片整理的四种方法: 1)删除索引并重建 2)使用 DROP_EXISTING 语句重建索引 3)使用 ALTER INDEX REBUILD 语句重建索引 4)使用 ALTER INDEX RE ...

  5. iNeuOS工业互联平台,WEB组态(iNeuView)图元和数据点组合及生成新图元复用,实现拖业务

    目       录 1.      概述... 1 2.      平台演示... 2 3.      应用过程... 2 1.   概述 iNeuView视图建模Web组态平台实现图元和数据点组合及 ...

  6. 第3.5节 丰富的Python字典操作

    一. 基本概念 Python提供一种通过名称来访问其各个值的数据结构,这种数据结构称为映射(mapping).字典(dict)是Python中唯一的内置映射类型,其中的值不按顺序排列,而是存储在键下, ...

  7. PyQt学习随笔:Model/View架构中的Delegate(委托)

    不同于MVC模式,Model/View设计并不包含用于处理与用户交互的完全独立的部件, 没有将用户交互部分完全分离.一般地,视图负责把模型数据显示给用户,以及处理用户的输入.但是,对于某些特殊要求(比 ...

  8. PyQt(Python+Qt)学习随笔:QAbstractItemView的dragEnabled属性的困惑

    老猿Python博文目录 老猿Python博客地址 dragEnabled属性用于控制视图是否支持拖拽,可以通过dragEnabled().setDragEnabled(bool enable)进行属 ...

  9. PyQt(Python+Qt)学习随笔:Qt Designer中连接Action和槽函数

    在Designer中试了半天,终于找到了Action添加槽函数的方法,操作步骤: 在Designer右边界面中点击鼠标右键 确保信号/槽编辑被勾选,如图是未勾选的情况:. 勾选后会出现信号和槽的编辑界 ...

  10. 【系统设计】不同分类的商品动态添加扩展属性的方法(WMS、小型电商)

    在做公司WMS系统的时候,遇到了一个商品模块的设计问题,具体业务流程如下. 客户提供需要存放的商品清单,根据商品清单生成收货单给客户,然后生成入库单进行商品入库操作. 在生成这两个单之前首先要录入商品 ...