实现对List里面的对象元素,以某个属性来分组

实现对List里面的对象元素,以某个属性来分组。

代码实现:

import com.alibaba.fastjson.JSON;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class ListGroupTest {

    static List<User> userList = new ArrayList<>();

    public static void main(String[] args) {

        /* 方式一:构建list,map,来实现对List,按某个元素分组 (当分组的元素存在为null时,可使用) */
        Map<Integer, List<User>> groupBy2 = new HashMap<>();
        List<User> tempList = null;
        for(User user : userList) {
            if(groupBy2.containsKey(user.getSex())) {
                tempList = groupBy2.get(user.getSex());
                tempList.add(user);
            } else {
                // 否则,第一次先构造一个list,在存入map
                tempList = new ArrayList<>();
                tempList.add(user);
                groupBy2.put(user.getSex(), tempList);
            }
        }
        System.out.println("groupBy2: " + JSON.toJSONString(groupBy2));

        /* 方式二:使用java8 来实现对List,按某个元素分组 (当分组的元素都不为null时,可使用,否则,会报空指针) */
        Map<Integer, List<User>> groupBy = userList.stream().collect(Collectors.groupingBy(User::getSex));
        System.out.println("groupBy: " + JSON.toJSONString(groupBy));
    }

    static {
        User user = new User();
        user.setId(1L);
        user.setName("张三");
        user.setSex(1);
        userList.add(user);

        user = new User();
        user.setId(2L);
        user.setName("李四");
        user.setSex(0);
        userList.add(user);

        user = new User();
        user.setId(3L);
        user.setName("王五");
        user.setSex(1);
        userList.add(user);

        user = new User();
        user.setId(4L);
        user.setName("赵六");
        user.setSex(0);
        userList.add(user);

        user = new User();
        user.setId(5L);
        user.setName("小七");
        user.setSex(0);
        userList.add(user);

        /* 将分组的字段 设置为null */
        user = new User();
        user.setId(6L);
        user.setName("大巴");
        user.setSex(null);
        userList.add(user);
    }

    static class User {

        private Long id;
        private String name;
        private Integer sex;
        private String remark;

        /* 省略 get set */
    }

}

原文地址:https://www.cnblogs.com/xbq8080/p/12606974.html

时间: 2024-10-10 19:08:01

实现对List里面的对象元素,以某个属性来分组的相关文章

使用原生JavaScript实现对select增加option标签并附加value属性

好久没有写原生的东西了,今天写了一个小项目里面包含着option选项,所以我决定使用原生JavaScript动态生成, 本着互联网分享精神,我将本篇文章分享给大家. html代码(就是一个select) <select name="" id="reg-select"></select> json数据 var json = [ { "cc": "86", "code": "C

用 Python 脚本实现对 Linux 服务器的监控

hon 分享到:8 原文出处: 曹江华 目前 Linux 下有一些使用 Python 语言编写的 Linux 系统监控工具 比如 inotify-sync(文件系统安全监控软件).glances(资源监控工具)在实际工作中,Linux 系统管理员可以根据自己使用的服务器的具体情况编写一下简单实用的脚本实现对 Linux 服务器的监控. 本文介绍一下使用 Python 脚本实现对 Linux 服务器 CPU 内存 网络的监控脚本的编写. Python 版本说明 Python 是由 Guido va

[Swift通天遁地]七、数据与安全-(2)使用Fuzi(斧子)类库实现对XML和HTML文档的快速解析

本文将演示使用Fuzi(斧子)类库实现对XML和HTML文档的快速解析. 首先确保在项目中已经安装了所需的第三方库. 点击[Podfile],查看安装配置文件. 1 platform :ios, '12.0' 2 use_frameworks! 3 4 target 'DemoApp' do 5 source 'https://github.com/CocoaPods/Specs.git' 6 pod 'Fuzi' 7 end 根据配置文件中的相关配置,安装第三方库. 然后点击打开[DemoAp

Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问

本篇内容还是建立在上一篇Java Web学习系列——Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Jar包 这部分内容需要以下Jar包支持 mysql-connector:MySQL数据库连接驱动,架起服务端与数据库沟通的桥梁: MyBatis:一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架: log4j:Apache的开源项目,一个功能强大的日志组件,提供方便的日志记录: 修改后的pom.xm

用C/C++实现对STORM的运行信息查看和控制

最近公司有个需求,需要在后端应用服务器上实时获取STORM集群的运行信息和topology相关的提交和控制,经过几天对STORM UI和CMD源码的分析,得出可以通过其thrift接口调用实现这些功能.先下载一个thrift库进行编码和安装.关于thrift可以参见这个地方.安装完成后,从STORM源码中将storm.thrift拷贝到thrift目录下.输入: hrift -gen cpp storm.thrift 会得到一个gen-cpp目录,里面就是thrift先关脚本的C++实现.我们先

基于DevExpress实现对PDF、Word、Excel文档的预览及操作处理

原文:基于DevExpress实现对PDF.Word.Excel文档的预览及操作处理 在一般的管理系统模块里面,越来越多的设计到一些常用文档的上传保存操作,其中如PDF.Word.Excel等文档,有时候是通过分布式的WCF技术实现数据的显示和处理,因此希望直接预览而不需要下载文件,这样能够给我们提供很多的方便.在DevExpress里面,提供了相应的控件来显示和处理这些文档,本文主要介绍如何利用DevExpress的控件实现对PDF.Word.Excel文档的预览和操作处理. 1.PDF的预览

Windows下Java程序实现对Mysql数据库的插入,删除,修改和查询

运行环境:Windows7,Eclipse,MySql,JDK1.7,mysql-connector-java-5.1.17-bin.jar 1 //import java.io.*; 2 import java.util.*; 3 import java.sql.*; 4 5 /** 6 * 7 * @date 2014-05-20 8 * @author asif 9 * @作用 java实现对mysql数据库的增减删查 10 * @bug 插入,删除,更新的时候异常停止 11 * 12 *

js 实现对ajax请求面向对象的封装

AJAX 是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. 在js中使用ajax请求一般包含三个步骤: 1.创建XMLHttp对象 2.发送请求:包括打开链接.发送请求 3.处理响应 在不使用任何的js框架的情况下,要想使用ajax,可能需要向下面一样进行代码的编写 var xmlHttp = xmlHttpCreate();//创建对象 xmlHttp.onreadysta

C#实现对Word文件读写[转]

手头上的一个项目报表相对比较简单,所以报表打印采用VBA引擎,通过定制Word模版,然后根据模版需要填充数据,然后OK,打印即可. 实现方法:首先需要引用VBA组建,我用的是Office2003 Professional,Dll版本号为Microsoft Word11.0 另外当然还需要引用Interop.Word.Dll. 代码如下: ///#region 打开Word文档,并且返回对象wDoc,wDoc /// /// 打开Word文档,并且返回对象wDoc,wDoc /// /// 完整W