java中对list集合中的数据按照某一个属性进行分组
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集合中的数据按照某一个属性进行分组的更多相关文章
- 关于java中对list集合中的数据按照某一个属性进行分组
有的时候,我们需要在java中对集合中的数据进行分组运算. 例如:Bill对象有money(float)和type(String)属性,现有个集合List<Bill>,需要按照Bill的t ...
- List集合中的数据按照某一个属性进行分组
有的时候,我们需要在java中对集合中的数据进行分组运算.例如:Bill对象有money(float)和type(String)属性,现有个集合List<Bill>,需要按照Bill的ty ...
- 使用Java Stream,提取集合中的某一列/按条件过滤集合/求和/最大值/最小值/平均值
不得不说,使用Java Stream操作集合实在是太好用了,不过最近在观察生产环境错误日志时,发现偶尔会出现以下2个异常: java.lang.NullPointerException java.ut ...
- java如何对List集合中的元素进行排序(请收藏)
在java开发中有时候我们需要对List集合中的元素按照一定的规则进行排序,比如说有个Person的集合,我们要根据Person的age属性进行排序输出,这就需要用到Java中提供的对集合进行操作的工 ...
- java代码实现将集合中的重复元素去掉
package com.loaderman.test; import java.util.ArrayList; import java.util.LinkedHashSet; import java. ...
- java:替换List集合中的某个任意值(对象)
定义replaceAll方法,将传入的新值替换集合中的老值(list,old,new) private static <E> void replaceAll(List<E> l ...
- 19SpringMvc_在业务控制方法中收集List集合中包含JavaBean参数
本文要实现的功能是给一张表单:
- redis中插入用户集合的语句,有四个属性
一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 ...
- 【java基础 17】集合中各实现类的性能分析
大致的再回顾一下java集合框架的基本情况 一.各Set实现类的性能分析 1.1,HashSet用于添加.查询 HashSet和TreeSet是Set的两个典型实现,HashSet的性能总是比Tree ...
随机推荐
- xios封装
封装的意义 1.提高代码可读性2.提高代码可维护性3.减少代码书写 封装 import axios from 'axios' axios.defaults.baseURL = 'http://127. ...
- react高阶组件的一些运用
今天学习了react高阶组件,刚接触react学习起来还是比较困难,和大家分享一下今天学习的知识吧,另外缺少的地方欢迎补充哈哈 高阶组件(Higher Order Components,简称:HOC) ...
- webpack系列:webpack小老弟接了个简单活
webpack深入浅出系列:进阶篇 前沿,本篇文章的讲解思路是以webpack的五大核心为线索,以webpack对象为第一视角来讲述(以前记得看过一个文笔非常厉害的技术啊婆写的,非常有趣.然后我就想着 ...
- 无所不能的Embedding5 - skip-thought的兄弟们[Trim/CNN-LSTM/quick-thought]
这一章我们来聊聊skip-thought的三兄弟,它们在解决skip-thought遗留问题上做出了不同的尝试[Ref1-4], 以下paper可能没有给出最优的解决方案(对不同的NLP任务其实没有最 ...
- 第4.4节 Python解析与推导:列表解析、字典解析、集合解析
一. 引言 经过前几个章节的介绍,终于把与列表解析的前置内容介绍完了,本节老猿将列表解析.字典解析.集合解析进行统一的介绍. 前面章节老猿好几次说到了要介绍列表解析,但老猿认为涉及知识层面比较多 ...
- PyQt(Python+Qt)学习随笔:Qt Designer中spacer部件的sizeType属性
在Designer的spacers部件中有2个部件,分别是Horizontal Spacer和Vertical Spacer,这两个部件都有sizeType属性,如图: 这个sizeType实际上与Q ...
- Scrum 冲刺 第七篇
Scrum 冲刺 第七篇 每日会议照片 昨天已完成工作 队员 昨日完成任务 黄梓浩 初步完成app首页模块的搭建 黄清山 完成部分个人界面模块数据库的接口 邓富荣 完成部分个人界面接口 钟俊豪 完成部 ...
- 剑指offer二刷——数组专题——数组中出现次数超过一半的数字
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...
- 题解-ARC058D Iroha Loves Strings
题面 ARC058D Iroha Loves Strings 给定 \(n\) 个字符串,从中选出若干个按给出顺序连接起来,总长等于 \(m\),求字典序最小的,保证有解. 数据范围:\(1\le n ...
- BJWC2011 禁忌
题目链接 题解 多模式匹配首先建 AC 自动机,看到 \(len \le 10^9\) 想到矩阵乘法优化. 朴素 DP 关于分割的最大值,可以贪心,只要走到一个能匹配串的点立刻返回根继续匹配就行,一定 ...