java - 如何使用流从列表中对 TreeMap 进行排序

标签 java collections java-8 java-stream

我有一个类说级别(它只是一个用于理解的虚拟类)。 我想要一个排序的 TreeMap<Level,Set<String>>基于levelId。 请找到下面的代码

import java.util.*;
import java.util.stream.Collectors;

    public class Level {
        int levelId;

        public Level(int levelId) {
            this.levelId = levelId;
        }

        public static Level getLevel(String name){
            return new Level(name.length());
        }

        public static void main(String[]args){
            Set<String> names=new HashSet<>();
            names.add("Mahesh");
            names.add("Ram");
            names.add("Rita");

            Map<Level, Set<String>> map = names.stream().collect(
                    Collectors.groupingBy(name->Level.getLevel(name),
                    Collectors.mapping(name->name,Collectors.toSet())));

        }
    }

我也试过 Collectors.collectingAndThen() .

感谢任何帮助。

提前致谢。

最佳答案

如果你不想让Level实现Comparable,你需要一个Comparator。然后,您必须将使用此分隔符作为 map 工厂创建 TreeMap 的 lambda 表达式传递给 groupingBy 收集器:

public class Level {
    int levelId;

    public Level(int levelId) {
        this.levelId = levelId;
    }

    public static Level getLevel(String name){
        return new Level(name.length());
    }

    public int getLevelId() {
        return levelId;
    }

    public static void main(String[]args){
        Set<String> names=new HashSet<>();
        names.add("Mahesh");
        names.add("Ram");
        names.add("Rita");

        Comparator<Level> c = Comparator.comparingInt(Level::getLevelId);
        Map<Level, Set<String>> map = names.stream()
            .collect(Collectors.groupingBy(
                         Level::getLevel, () -> new TreeMap<>(c), Collectors.toSet()));
    }
}

关于java - 如何使用流从列表中对 TreeMap 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46702432/

相关文章:

java - 如何在Java中将字符串按空格分割并以键值的形式存储在map中?

java - 如何使用流编写模式方法

自动关闭资源的Java 8 Stream(基于资源).iterator()?

java - 如何从 List<Integer> 中获取 IntStream?

java - LinkedHashSet javadoc 中的错误?

java - HQL:查找子对象包含特定属性值的对象

java - 在命令行下运行Java程序的语法是什么?

java - Wicket - 多次打印列表中的 getlist()

c# - 仅存储键的最佳查找数据结构(没有值的字典)

php - 在 Eloquent 模型中返回集合而不是关系