Lambda – converts the string list to a sorted map string length as the key

I have a list < string > and I have to convert it into a map. By grouping strings of the same length into a list, I use the string length as the key to sort the order It can be used –

Map<Integer,List<String>> result = new TreeMap<>();
for (String str : list) {
    if (!result.containsKey(str.length())) {
        result.put(str.length(),new ArrayList<>());
    }
    result.get(str.length()).add(str);
}

How can we use Java 8 streaming?

Solution

You can use stream to:

Map<Integer,List<String>> result = list.stream()
    .collect(Collectors.groupingBy(
        String::length,// use length of string as key
        TreeMap::new,// create a TreeMap
        Collectors.toList())); // the values is a list of strings

This is done by accepting collectors with 3 parameters Groupingby overload to collect streams: key mapper functions, mapped providers, and downstream collectors

However, there is a more concise approach without streams:

Map<Integer,List<String>> result = new TreeMap<>();
list.forEach(s -> result.computeIfAbsent(s.length(),k -> new ArrayList<>()).add(s));

This uses list Foreach and map Computeifabsent to achieve what you want

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>