记录使用Stream转多层map数据结构及遇到的坑

首先是List转Map<key,value>数据结构:

Map<String, Integer> result =
                    cloudStoreUserSearchInfoList.stream()
                            .collect(Collectors.toMap(CloudStoreUserSearchInfo::getSearchKey,
                                            cloudStoreUserSearchInfo -> cloudStoreUserSearchInfo.getSearchType()));

这里会有个小坑,当你的key相同时,会抛出一个 java.lang.IllegalStateException: Duplicate key 

解决办法,传入处理处理机制,当相同的key时,选择一个

            Map<String, Integer> result =
                    cloudStoreUserSearchInfoList.stream()
                            .collect(Collectors.toMap(CloudStoreUserSearchInfo::getSearchKey,
                                    cloudStoreUserSearchInfo -> cloudStoreUserSearchInfo.getSearchType(), (key1, key2) -> key1));

List转Map<key,Map<key,vaule>>数据结构:

Map<String, Map<String, Integer>> result =
                    cloudStoreUserSearchInfoList.stream()
                            .collect(Collectors.groupingBy(CloudStoreUserSearchInfo::getId,
                                    Collectors.toMap(CloudStoreUserSearchInfo::getSearchKey,
                                            cloudStoreUserSearchInfo -> cloudStoreUserSearchInfo.getSearchType())));

三层四层Map以此类推就可以了。

原文地址:https://www.cnblogs.com/codecodeandcode/p/12893573.html