User 实体类
package com.fjx.springbootjsonobject.entity; import java.util.Date; /** * @description TODO * @author JiaXing.Feng * @date 2020-11-24 9:48 * @version 1.0.0.1 */ public class User { private Long id; //姓名 private String name; //年龄 private int age; //工号 private String jobNumber; //性别 private String sex; //入职日期 private Date entryDate; public Integer getFamilyMemberQuantity() { return familyMemberQuantity; } public void setFamilyMemberQuantity(Integer familyMemberQuantity) { this.familyMemberQuantity = familyMemberQuantity; } //家庭成员数量 private Integer familyMemberQuantity; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getJobNumber() { return jobNumber; } public void setJobNumber(String jobNumber) { this.jobNumber = jobNumber; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Date getEntryDate() { return entryDate; } public void setEntryDate(Date entryDate) { this.entryDate = entryDate; } public User(Long id, String name, int age, String jobNumber, String sex, Date entryDate, Integer familyMemberQuantity) { this.id = id; this.name = name; this.age = age; this.jobNumber = jobNumber; this.sex = sex; this.entryDate = entryDate; this.familyMemberQuantity = familyMemberQuantity; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + ", jobNumber='" + jobNumber + '\'' + ", sex='" + sex + '\'' + ", entryDate=" + entryDate + ", familyMemberQuantity=" + familyMemberQuantity + '}'; } }创建List 集合
User e1 = new User(1L, "jason1", 10, "001", "男", new Date(), 10); User e2 = new User(2L, "jason2", 10, "002", "女", new Date(), 10); User e4 = new User(3L, "jason3", 10, "003", "男", new Date(), 10); User e5 = new User(4L, "jason4", 10, "004", "女", new Date(), 10); User e6 = new User(5L, "jason5", 10, "005", "男", new Date(), 10); User e7 = new User(6L, "jason6", 10, "006", "女", new Date(), 10); User e8 = new User(7L, "jason7", 10, "007", "男", new Date(), 10); User e9 = new User(8L, "冯小兴", 20, "008", "男", new Date(), 10); User e10 = new User(9L, "冯帅帅", 30, "009", "男", new Date(), 10); User e11 = new User(10L, "冯佳兴", 40, "010", "女", new Date(), 10); User e12 = new User(11L, "温小哲", 50, "011", "男", new Date(), 10); List<User> userList = new ArrayList<>(); userList.add(e1); userList.add(e2); userList.add(e5); userList.add(e4); userList.add(e6); userList.add(e7); userList.add(e8); userList.add(e9); userList.add(e10); userList.add(e11); userList.add(e12); // 根据性别进行分组 Map<String, List<User>> groupBySexList = userList.stream().collect(Collectors.groupingBy(User::getSex));map 遍历的的四种方式
方法一:在for循环中使用entries实现Map的遍历
/** * 最常见也是大多数情况下用的最多的,一般在键值对都需要使用 */ for (Map.Entry<String, List<User>> entryUser : groupBySexList.entrySet()) { String key = entryUser.getKey(); List<User> entryUserList = entryUser.getValue(); System.out.println(entryUserList); } 方法二 :在for循环中遍历key或者values,一般适用于只需要map中的key或者value时使用,在性能上比使用entrySet较好 // key for (String key : groupBySexList.keySet()) { System.out.println(key); } // value for (List<User> idList : groupBySexList.values()) { System.out.println(idList); } 方法三:通过Iterator 遍历 Iterator<Map.Entry<String, List<User>>> entries = groupBySexList.entrySet().iterator(); while (entries.hasNext()) { Map.Entry<String, List<User>> entry = entries.next(); String key = entry.getKey(); List<User> value = entry.getValue(); System.out.println(key + ":" + value); } 方法四:通过键找值遍历,这种方式的效率比较低,因为本身从键取值是耗时的操作; Iterator<Map.Entry<String, List<User>>> entries = groupBySexList.entrySet().iterator(); while (entries.hasNext()) { Map.Entry<String, List<User>> entry = entries.next(); String key = entry.getKey(); List<User> value = entry.getValue(); System.out.println(key + ":" + value); } /** * List -> Map * 需要注意的是: * toMap 如果集合对象有重复的key,会报错Duplicate key .... * user1,user2的id都为1。 * 可以用 (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2 */ Map<Long, User> userMap = userList.stream().collect(Collectors.toMap(User::getId, a -> a,(k1,k2)->k1)); for (Map.Entry<Long, User> entry : userMap.entrySet()) { Long key = entry.getKey(); User entryUserList = entry.getValue(); System.out.println(entryUserList); }冯佳兴 认证博客专家 Redis ELk 消息队列 一名非常热爱计算机的 Boy,技术是一门哲学,愿意和我一起研究新的技术吗?本人坚持自主学习,站在巨人肩膀上学习,善于分享。我会经常分享系列基础博客,希望大家喜欢,有什么问题记得关注留言哦!