1. 初始化数据
以下所提到的内部 Map 即 map1、map2,外部 Map 即 map
- public class StreamPractice {
- @Data
- @AllArgsConstructor
- @ToString
- static class Language {
- private String planStudy;
- private String applyStudy;
- }
-
- public static void main(String[] args) {
- List<Language> languageList = Arrays.asList(
- new Language("JAVA", "Linux,Python"),
- new Language("MySQL", "C,C++"),
- new Language("Linux", "MySQL,Groovy"));
-
- Map<String, String> map1 = new HashMap<>();
- map1.put("Java", "20");
- map1.put("Python", "20");
- map1.put("JavaScript", "20");
-
- Map<String, String> map2 = new HashMap<>();
- map2.put("MySQL", "12");
- map2.put("Oracle", "12");
-
- Map<String, Map<String, String>> map = new HashMap<>();
- map.put("language", map1);
- map.put("database", map2);
- }
- }
2. 用一行代码将 languageList 中每个对象的两个属性使用“,”拼接并去重转为字符串,格式如下(不考虑顺序):Linux,Python,JAVA,C,C++,MySQL,Groovy
思路:
Stream>
Stream参考代码:
- String languageStr = languageList.stream()
- .map(item -> Arrays.asList((item.getPlanStudy() + "," + item.getApplyStudy()).split(",")))
- .flatMap(Collection::stream)
- .distinct()
- .collect(Collectors.joining(","));
- System.out.println(languageStr);
3. 获取外部 map 中的多个内部 map 的 key
思路:
输出结果如下:
- MySQL
- Oracle
- Java
- JavaScript
- Python
参考代码:
- List<String> innerMapKey = map.values()
- .stream()
- .map(Map::keySet)
- .flatMap(Collection::stream)
- .collect(Collectors.toList());
- innerMapKey.forEach(System.out::println);
4. 将外部 map 中的多个内部 map 拼成一个 map
思路:
Set> 输出结果如下:
{Java=20, MySQL=12, JavaScript=20, Oracle=12, Python=20}
参考代码:
- Map<String, String> collectMap = map.values()
- .stream()
- .map(Map::entrySet)
- .flatMap(Set::stream)
- .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
- System.out.println(collectMap);
5. 判断内部 map 是否全为空
思路:
这个其实比较简单,就是将原来的 for 循环转为 Stream,然后再知道 allMatch() 就基本成了
输出结果如下:
false
参考代码:
- boolean isAllEmptyMap = map.keySet()
- .stream()
- .allMatch(item -> ObjectUtil.isEmpty(map.get(item)));
- System.out.println(isAllEmptyMap);
ObjectUtil 工具类使用的是 hutool 工具包
6. 将外部 map 中的每一个内部 map 的 key 和 value 拼成 “xxx:xxx;xxx:xxx;xxx:xxx;” 格式
思路:
要将内部 map 都拼成指定格式,那就先学会将一个 map 转为指定格式,再通过外部 map 去循环后收集起来就可以了
这样我们就完成了一个 map 的格式转换,现在就可以处理 map 中的多个 map 了
输出结果如下:
- MySQL:12;Oracle:12
- Java:20;JavaScript:20;Python:20
参考代码:
- // 将外部 Map 中的每一个内部 Map 的 key 和 value 拼成 “xxx:xxx;xxx:xxx;xxx:xxx;” 格式
- List<String> formatInnerMap = map.keySet().stream().map(key ->
- map.get(key)
- .entrySet()
- .stream()
- .map(item -> String.join(":", item.getKey(), item.getValue()))
- .collect(Collectors.joining(";"))).collect(Collectors.toList());
- formatInnerMap.forEach(System.out::println);