Map Entry流-EntryStream
EntryStream是Hutool中专门用于处理Map Entry的流工具类,提供了丰富的Entry流操作方法,让Map的流处理更加便捷和强大。
# 1. EntryStream的创建
# 1.1 从Map创建EntryStream
// 从Map创建EntryStream
Map<Integer, String> map = new HashMap<>();
map.put(1, "张三");
map.put(2, "李四");
map.put(3, "王五");
EntryStream<Integer, String> entryStream = EntryStream.of(map);
# 1.2 从Entry集合创建EntryStream
// 从Entry集合创建EntryStream
Set<Map.Entry<Integer, String>> entries = map.entrySet();
EntryStream<Integer, String> entryStream = EntryStream.of(entries);
# 2. EntryStream的操作
# 2.1 过滤操作
// 过滤键大于1的Entry
EntryStream<Integer, String> filteredStream = entryStream.filter(entry -> entry.getKey() > 1);
// 过滤值包含"张"的Entry
EntryStream<Integer, String> filteredStream = entryStream.filterValue(value -> value.contains("张"));
# 2.2 映射操作
// 映射键
Stream<Integer> keyStream = entryStream.keys();
// 映射值
Stream<String> valueStream = entryStream.values();
// 映射为新的键值对
EntryStream<String, Integer> mappedStream = entryStream.map((key, value) -> new AbstractMap.SimpleEntry<>(value, key));
# 2.3 转换操作
// 转换为List
List<Map.Entry<Integer, String>> entryList = entryStream.toList();
// 转换为Map
Map<Integer, String> resultMap = entryStream.toMap();
// 转换为LinkedHashMap(保持插入顺序)
LinkedHashMap<Integer, String> linkedHashMap = entryStream.toLinkedMap();
# 3. EntryStream的聚合操作
# 3.1 统计操作
// 统计Entry数量
long count = entryStream.count();
# 3.2 最值操作
// 求键的最大值
Optional<Integer> maxKey = entryStream.maxKey();
// 求键的最小值
Optional<Integer> minKey = entryStream.minKey();
// 求值的最大值
Optional<String> maxValue = entryStream.maxValue();
// 求值的最小值
Optional<String> minValue = entryStream.minValue();
# 4. EntryStream的其他操作
# 4.1 排序操作
// 按键排序
EntryStream<Integer, String> sortedByKeyStream = entryStream.sortedByKey();
// 按值排序
EntryStream<Integer, String> sortedByValueStream = entryStream.sortedByValue();
// 自定义排序
EntryStream<Integer, String> sortedStream = entryStream.sorted((entry1, entry2) -> entry1.getValue().compareTo(entry2.getValue()));
# 4.2 去重操作
// 根据值去重
EntryStream<Integer, String> distinctStream = entryStream.distinctByValue();
# 4.3 遍历操作
// 遍历Entry
entryStream.forEach(entry -> Console.log(entry.getKey() + ": " + entry.getValue()));
// 遍历键值对
entryStream.forEach((key, value) -> Console.log(key + ": " + value));
# 5. EntryStream的实际应用
# 5.1 Map的键值处理
// Map键值互换
Map<Integer, String> originalMap = new HashMap<>();
originalMap.put(1, "张三");
originalMap.put(2, "李四");
Map<String, Integer> reversedMap = EntryStream.of(originalMap)
.map((key, value) -> new AbstractMap.SimpleEntry<>(value, key))
.toMap();
# 5.2 Map的过滤和转换
// 过滤并转换Map
Map<Integer, String> map = new HashMap<>();
map.put(1, "张三");
map.put(2, "李四");
map.put(3, "王五");
// 过滤出键大于1的值,并转换为List
List<String> resultList = EntryStream.of(map)
.filter(entry -> entry.getKey() > 1)
.values()
.collect(Collectors.toList());
# 6. 适用场景
EntryStream适用于以下场景:
- 需要对Map的Entry进行复杂处理时
- 需要对Map的键和值进行联合操作时
- 需要便捷地将Map转换为其他数据结构时
- 希望使用更友好的API处理Map的流操作时
- 需要对Map的Entry进行过滤、映射、排序等操作时
通过EntryStream,开发者可以更加便捷地处理Map的Entry流,编写更简洁、更易维护的代码,同时享受到函数式编程带来的好处。