我有字符串
和哈希映射,
如下代码所示:
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的解决方案呢?
这种问题不太适合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);
由于这不能仅使用<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转换为字符串并将字符串转
问题内容: 我正在从返回JSON格式数据的服务器请求数据。发出请求时,将HashMap转换为JSON并不难,但另一种方式似乎有些棘手。JSON响应如下所示: 哪种方法最容易访问此数据?我正在使用GSON模块。 问题答案: 干得好: