【发布时间】:2021-06-20 19:37:24
【问题描述】:
我有一个字符串列表和 Map
List<String> mylist = Arrays.asList("key1", "key2", "key3", "key4");
Map<String, String> map2 = new HashMap<>();
map2.put("key1", "value1");
map2.put("key2", "value2");
map2.put("key11", "value11");
var classVar = new Object() {
String sb = "";
};
classVar.sb = "Select * from table1 where key1='apple' and key2='mango' and key11='banana'";
mylist.forEach(e -> {
map2.forEach((k, v) -> {
if (e.equalsIgnoreCase(k)) {
classVar.sb = classVar.sb.replaceAll(k, v);
}
});
});
最后的字符串应该是:
Select * from table1 where value1='apple' and value2='mango' and key11='banana'
Key11 不应被替换,因为它不在 mylist 中。
如何使用 Java 8 的 map()/stream() 等功能而不是 forEach 循环来做同样的事情?我在列表和映射中有大量字符串元素,我需要在最终字符串中动态替换它们。
【问题讨论】:
-
看起来您正在从某个地方收到的纯非参数化字符串构建 SQL 语句。如果你还不知道,你可能想了解一下 SQL 注入
-
你已经在这里问过这个问题:stackoverflow.com/questions/68053753/…
-
我已经尝试了上面链接中的解决方案。位我无法将我的字符串设为 AtomicReference。 Stream.reduce() 示例代码不起作用..任何人都可以建议如何在这种情况下成功使用 stream.reduce()
标签: java java-stream