我有一个List<String> abc
集合。我需要将其转换为Map<String, TreeSet<String>
,其中键是来自abc
的排序字符串,并且在排序之前将此字符串添加到TreeSet中。
可以使用Collectors.toMap()
?
离。伪代码:
List<String> abc = ["ala","laa","qwe"]
Map<String, TreeSet<String> = {key = "aal" , values in treeset = "ala" , "laa"
key = "eqw" values in treeset = "qwe"}
答案 0 :(得分:4)
groupingBy
是合适的收藏家
Map<String, TreeSet<String>> map =
list.stream().collect(Collectors.groupingBy(
s -> withSortedChars(s),
Collectors.toCollection(TreeSet::new)));
答案 1 :(得分:0)
如果还需要对键进行排序,可以尝试以下
public static void main(String[] args) {
List<String> abc = Arrays.asList("ala", "laa", "qwe");
Map<String, TreeSet<String>> sorted = abc.stream()
.collect(Collectors.groupingBy(Utils::sortByChar, TreeMap::new, Collectors.toCollection(TreeSet::new)));
System.out.println(sorted);
}
public static class Utils {
public static String sortByChar(String s) {
char[] arr = s.toCharArray();
Arrays.sort(arr);
return new String(arr);
}
}
输出
{aal=[ala, laa], eqw=[qwe]}