网站首页 > java教程 正文
在Java 8中引入的Stream API为集合操作提供了一种声明式的编程风格。本文将通过几个示例来展示如何使用Stream API来操作Map对象,包括过滤、映射、排序等常见操作。
准备工作
首先,我们需要创建一个简单的Map对象来作为数据源。这里假设我们有一个Person类,它包含姓名和年龄两个属性。
java
深色版本
1public class Person {
2 private String name;
3 private int age;
4
5 public Person(String name, int age) {
6 this.name = name;
7 this.age = age;
8 }
9
10 // getters and setters
11}
接下来,创建一个包含一些Person对象的Map:
java
深色版本
1Map<String, Person> people = new HashMap<>();
2people.put("Alice", new Person("Alice", 30));
3people.put("Bob", new Person("Bob", 25));
4people.put("Charlie", new Person("Charlie", 35));
5people.put("Diana", new Person("Diana", 22));
基本操作
过滤 Map
如果我们想找出所有年龄大于30岁的人员,可以使用stream()方法将Map转换成流,然后使用filter()方法过滤出满足条件的对象。
java
深色版本
1Map<String, Person> oldPeople = people.entrySet().stream()
2 .filter(entry -> entry.getValue().getAge() > 30)
3 .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
4
5System.out.println(oldPeople);
映射 Map
如果我们要从Map中提取所有人的名字并存储在一个列表中,可以使用map()方法来实现。
java
深色版本
1List<String> names = people.values().stream()
2 .map(Person::getName)
3 .collect(Collectors.toList());
4
5System.out.println(names);
排序 Map
对Map进行排序通常需要先将其转换为流,然后使用sorted()方法排序后再收集回Map或列表。例如,按照年龄排序:
java
深色版本
1Map<String, Person> sortedByAge = people.entrySet().stream()
2 .sorted(Map.Entry.comparingByValue(Comparator.comparingInt(Person::getAge)))
3 .collect(Collectors.toMap(
4 Map.Entry::getKey,
5 Map.Entry::getValue,
6 (oldValue, newValue) -> oldValue, // 在键冲突时保留旧值
7 LinkedHashMap::new)); // 使用LinkedHashMap保持顺序
8
9System.out.println(sortedByAge);
高级操作
多重过滤与排序
我们可以结合多个过滤器和排序器来执行更复杂的操作。比如,筛选年龄大于25岁的人,并按年龄降序排列:
java
深色版本
1Map<String, Person> filteredAndSorted = people.entrySet().stream()
2 .filter(entry -> entry.getValue().getAge() > 25)
3 .sorted(Map.Entry.comparingByValue(Comparator.comparingInt(Person::getAge).reversed()))
4 .collect(Collectors.toMap(
5 Map.Entry::getKey,
6 Map.Entry::getValue,
7 (oldValue, newValue) -> oldValue,
8 LinkedHashMap::new));
9
10System.out.println(filteredAndSorted);
总结
通过上面的例子,我们可以看到Java Stream API使得操作Map变得既简洁又强大。无论是基本的过滤和映射操作,还是复杂的排序和组合过滤,都可以轻松完成。
猜你喜欢
- 2024-10-03 SpringBoot中如何根据JSON数据生成一个动态对象?
- 2024-10-03 边玩手机边学Java----Java基础之Map
- 2024-10-03 聊聊Mybatis的初始化之Mapper.xml映射文件的解析
- 2024-10-03 MapStruct 使用教程, 万字详解(mapstruct enum)
- 2024-10-03 看似简单,在JAVA中如何将一个Object转换成Array
- 2024-10-03 java8函数式Map操作也太强大了吧,1次就帮我省了10多行代码
- 2024-10-03 map的一个骚操作!你学废了么?#互联网
- 2024-10-03 轻松搞定!用JavaScript将列表转换为Map
- 2024-10-03 告别 BeanUtils,拥抱 MapStruct:高效 Java 对象映射的经典之选
- 2024-10-03 「JavaScript 从入门到精通」11.Map和Set对象
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)