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

使用java 8 stream将String替换为hashmap值

璩华辉
2023-03-14

我有字符串哈希映射,如下代码所示:

Map<String, String> map = new HashMap<>();
    map.put("ABC", "123");
    String test = "helloABC";
    map.forEach((key, value) -> {
        test = test.replaceAll(key, value);
    });

我尝试用< code>HashMap值替换该字符串,但这不起作用,因为< code>test是最终的,不能在< code>forEach的主体中重新分配。

那么有没有用Java 8 Stream API将< code>String替换为< code>HashMap的解决方案呢?

共有2个答案

卓胜
2023-03-14

这种问题不太适合Streams API。流的当前化身主要针对可以并行的任务。也许将来会增加对这种操作的支持(见https://bugs . open JDK . Java . net/browse/JDK-8133680)。

您可能会觉得有趣的一种基于流的方法是减少函数而不是字符串:

Function<String, String> combined = map.entrySet().stream()
    .reduce(
        Function.identity(),
        (f, e) -> s -> f.apply(s).replaceAll(e.getKey(), e.getValue()),
        Function::andThen
    );

String result = combined.apply(test);
厉永宁
2023-03-14

由于这不能仅使用<code>forEach()(<code>消息),该容器存储一个重新编写的<code>字符串:

final List<String> msg = Arrays.asList("helloABC");
map.forEach((key, value) -> msg.set(0, msg.get(0).replace(key, value)));
String test = msg.get(0);

请注意,我将replace eAll()更改为替换(),因为前者适用于正则表达式,但从您的代码判断,您似乎需要用字符串本身替换(别担心,尽管名称令人困惑,但它也替换了所有出现)。

如果你想要的正是 Stream API,你可以使用 reduce() 操作:

String test = map.entrySet()
                 .stream()
                 .reduce("helloABC", 
                         (s, e) -> s.replace(e.getKey(), e.getValue()), 
                         (s1, s2) -> null);

但要考虑到,这种约简只能在串行(而不是并行)流中正常工作,其中从未调用合路器函数(因此可能是任何)。

 类似资料:
  • 我有一个HashMap和一个包含键/值的属性文件。属性文件以这种格式存储键/值“4,5=2”我构建了一个从文件加载属性的方法,它将这对“键/值”放入一个HashMap数组(字符串、整数)中。但我的问题是,我希望键的每个元素都存储为int形式,以便将它们用作另一个方法的参数。键存储为字符串。如有任何帮助,我们将不胜感激。谢谢你!

  • 我有个方法 所以本质上是这样的: exec(这里的一些java魔术将str3转换为string[],然后将这个string[]传递给这个exec方法本身);

  • 我知道如何从->“转换”一个简单的Java,即: 现在我想用一张地图做基本相同的操作,即: 解决方案不应局限于->。就像上面的示例一样,我希望调用任何方法(或构造函数)。

  • //从map2到map1或newMap中的键的值 //如何将值重新放置到键?在新地图中

  • 问题内容: 我正在开发一些应用程序,它允许从SD卡中选择图像,将其保存到数据库中并为ImageView设置此值。我需要知道将uri转换为字符串并将字符串转换为uri的方法。现在,我使用了Uri的getEncodedPath()方法,但是例如,此代码不起作用: 因此,我不知道如何将Uri保存到数据库中并根据保存的值创建新的Uri。请帮我修复它。 问题答案: 我需要知道将uri转换为字符串并将字符串转

  • 问题内容: 是的实现,并且的构造函数接收类型参数。那么,为什么必须对其进行显式转换? 问题答案: 这是因为extends(又实现了)。您尝试将其输入。因此,它是不兼容的。 您需要将字符串属性一一输入到地图中。 例如: