网站首页 > 精选教程 正文
一个实例来展示如何使用Java Stream API对Map进行操作。假设我们有一个Map,表示学生的姓名和他们的年龄,我们将演示如何筛选出年龄大于某个值的所有学生,以及如何按年龄对学生进行排序。
示例:对Map中的数据进行筛选和排序
首先,我们创建一个示例Map:
java
复制
import java.util.HashMap;
import java.util.Map;
import java.util.List;
import java.util.stream.Collectors;
public class MapStreamExample {
public static void main(String[] args) {
// 创建一个示例Map
Map studentAges = new HashMap<>();
studentAges.put("Alice", 20);
studentAges.put("Bob", 22);
studentAges.put("Charlie", 18);
studentAges.put("David", 21);
// 筛选年龄大于20岁的学生
Map filteredStudents = studentAges.entrySet().stream()
.filter(entry -> entry.getValue() > 20)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
System.out.println("Students older than 20: " + filteredStudents);
// 按年龄排序(从年轻到年长)
List> sortedEntries = studentAges.entrySet().stream()
.sorted(Map.Entry.comparingByValue())
.collect(Collectors.toList());
// 如果你需要结果仍然是Map,但注意这会丢失原始Map的键的唯一性,如果值相同
Map sortedStudentsByAge = sortedEntries.stream()
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(existing, replacement) -> existing, // 如果有冲突,保留原有的值
LinkedHashMap::new)); // 保持插入顺序
System.out.println("Students sorted by age: " + sortedStudentsByAge);
}
}
解释
筛选操作:
我们首先通过entrySet().stream()将Map转换为Stream。
使用filter()方法筛选出年龄大于20岁的条目。
使用collect(Collectors.toMap(...))将结果收集回Map。
排序操作:
同样地,通过entrySet().stream()将Map转换为Stream。
使用sorted(Map.Entry.comparingByValue())按值(年龄)进行排序。
如果需要将排序后的结果存储回Map,并保留插入顺序(Java 8及以后版本),可以使用LinkedHashMap。注意,如果两个学生的年龄相同,则保留在Stream中遇到的第一个学生的条目。
通过这种方式,Java Stream API提供了强大的数据处理能力,即使对于像Map这样的非传统集合类型也是如此。
#java#
猜你喜欢
- 2024-11-10 为什么28岁不能学java? 28岁开始学编程晚吗
- 2024-11-10 gc的年龄信息存储在什么地方? 年龄信息用什么数据类型存储
- 2024-11-10 JVM基础学习 jvm入门到精通
- 2024-11-10 Java-对象到底占多少个字节?计算规则是什么?
- 2024-11-10 浅谈JAVA中的基本变量 java常用变量
- 2024-11-10 大数据必学Java基础(十三):基本数据类型的转换
- 2024-11-10 Java码农35岁之后只能送外卖? 我的世界java
- 2024-11-10 这些Java基础知识,诸佬们都还记得嘛(学习,复习,面试都可)
- 2024-11-10 2021-01-03:java中,描述一下什么情况下,...
- 2024-11-10 零基础学Java之数据类型与变量(上集)
你 发表评论:
欢迎- 04-11Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- 04-11Java中你知道几种从字符串中找指定的字符的数量
- 04-11探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- 04-11Python字符串详解与示例(python字符串的常见操作)
- 04-11java正则-取出指定字符串之间的内容
- 04-11String s1 = new String("abc");这句话创建了几个字符串对象?
- 04-11java判断字符串中是否包含某个字符
- 04-11关于java开发中正确的发牌逻辑编写规范
- 最近发表
-
- Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- Java中你知道几种从字符串中找指定的字符的数量
- 探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- Python字符串详解与示例(python字符串的常见操作)
- java正则-取出指定字符串之间的内容
- String s1 = new String("abc");这句话创建了几个字符串对象?
- java判断字符串中是否包含某个字符
- 关于java开发中正确的发牌逻辑编写规范
- windows、linux如何后台运行jar(并且显示进程名)
- 腾讯大佬私人收藏,GitHub上最受欢迎的100个JAVA库,值得学习
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)