gpt4 book ai didi

Java8 lambda 顺序或管道字符串转换

转载 作者:行者123 更新时间:2023-11-29 07:32:28 26 4
gpt4 key购买 nike

我在基于 JCR 的应用程序上工作,当它包含非法字符时,我的查询会中断。

所以我完成了一个非常简单的任务:给定一个查询字符串和一个包含“狡猾”字符列表的映射,依次用允许的字符替换那些狡猾的字符。我想使用 lambda,遗憾的是有点卡住了:

public static Map<String, String> DODGY_CHARS = getDodgyCharMapping();

static Map<String, String> getDodgyCharMapping(){
Map<String, String> map = new HashMap<>();
map.put("'", "''");
return map;
}

private String sanitizeQueryString(String query){
DODGY_CHARS.keySet().forEach(key->{
query = replaceCharacter(query, key, DODGY_CHARS.get(key));
});
return query;
}

lambda 中的 query 变量是 J8 不满意的,导致以下错误:

error: local variables referenced from a lambda expression must be final or effectively final

最佳答案

问题是您正在访问 lambda 表达式主体范围内的局部变量 query。因此它必须是 final 或有效的 final。但是,将 query 声明为 final 不会解决问题,因为您要为其分配一个值。

我建议您让方法 replaceCharacter 获取一个 StringBuilder 并让它替换内容,而不是读取和重新分配 String变量。

关于Java8 lambda 顺序或管道字符串转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40089185/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com