当前位置: 首页 > 知识库问答 >
问题:

如何在地图中保存流的顺序

秦鹏飞
2023-03-14

我试图从流中获取订单地图。我有下一个代码:

Map<String, PatternWrapper> regexps = allConfigurations
    .stream()
    .flatMap(configuration -> configuration.getPlugins().stream())
    .sorted(
            (left, right) -> {
                if (left.getType().equals(ObfuscationType.REGEX_BLACKLIST) &&
                        right.getType().equals(ObfuscationType.REGEX_BLACKLIST))
                    return 0;
                else if (left.getType().equals(ObfuscationType.REGEX_BLACKLIST) &&
                        (!right.getType().equals(ObfuscationType.REGEX_BLACKLIST)))
                    return 1;
                else
                    return -1;
            }
    )
//    .sorted(LogConfiguration.Plugin::compareTo)
    .filter(plugin -> (ObfuscationType.REGEX.equals(plugin.getType())
            || ObfuscationType.REGEX_BLACKLIST.equals(plugin.getType())))
    .collect(Collectors.toMap(
            plugin -> plugin.getId(),
            plugin -> new
                    PatternWrapper(plugin.getId(), Pattern.
                    compile(plugin.getValue()))));

return regexps;

在这里,我尝试对数据流进行排序,我认为地图也是有序的。但我错了。我认为调用collect(Collectors.toMap())不会保存流的顺序。有我如何做到这一点的例子吗?

共有1个答案

梁成双
2023-03-14

假设<code>所有配置。stream按照您所说的维护顺序。。。

您可以使用收集器.toMap的重载来获取地图供应商,因此您可以传递链接的哈希地图,因为这可以保持插入顺序。

Collectors.toMap(
        plugin -> plugin.getId(),
        plugin -> new
                PatternWrapper(plugin.getId(), Pattern.
                compile(plugin.getValue())),
        (left, right) -> left,
        LinkedHashMap::new);

这里的第三个参数是一个合并函数,用于解决与同一个键相关联的值之间的冲突。但是这在这里不应该是一个问题,因为在您的原始代码中没有这个。

 类似资料:
  • 问题内容: 我想处理对象中的列表。我必须确保处理所有元素,以便收到它们。 因此l,我应该使用它吗? 还是只要不使用并行性就足以使用流? 问题答案: 你在问错问题。你正在询问而要按顺序处理项目,因此你必须询问订购。如果你有顺序的流并执行保证维持顺序的操作,则该流是并行处理还是顺序处理都没有关系;实施将维持秩序。 有序属性不同于并行与顺序。例如,如果你调用一个同时调用流将是无序在List返回的有序流。

  • 我想在Java对象中处理列表。我必须确保处理所有的元素,以便我收到他们。 因此,我是否应该对我使用的每个调用? 或者,只要不使用并行性,只使用流就足够了吗?

  • 我已经讨论了一些相关问题,比如如何确保java8流中的处理顺序?,我仍然不完全清楚输出元素的顺序。因此,请澄清我的以下疑问。 我认为至少在理论上(或根据java规范),它可以按1、2、3、4、5、6、7、8以外的随机顺序打印。我说得对吗? 还有一个相关的问题——遭遇订单保存的决定是在执行的哪个点做出的?更准确地说,在执行开始之前,是否通过检查源、中间操作和终端操作的特性来评估整个流水线的订单特性?

  • 问题内容: 请看下面我的地图 我正在按钥匙的大小顺序遍历此地图 但是,这打印出来 有没有一种方法可以按键的大小顺序打印出来,所以,我想像这样遍历这张地图 等等… 非常感谢您的帮助! 问题答案: 收集所有键,对它们进行排序,然后按键迭代地图,如下所示:

  • 问题内容: 关于JPA,我有以下问题: 我可以将元素的顺序保存在java.util.List中吗?在我的应用程序中,将元素放入列表的顺序很重要,但是从数据库中获取这些集合后,顺序却不一样(符合预期)。您能告诉我解决这个问题的方法吗? PS:我放入集合中的实体中没有字段可用来订购它们。 罗森 问题答案: 在JPA 1中,有一些骇人听闻的方法可以做到这一点,但是切换到JPA 2提供程序是最容易的。您正

  • 目前,我从文档中获得的所有文本如下所示: