私はJCRベースのアプリケーションで動作し、不正な文字が含まれているとクエリが壊れます。Java8ラムダシーケンシャルまたはパイプ文字列変換
私は本当に単純なタスクを実行しました。クエリ文字列と "dodgy"文字のリストを含むマップが与えられた場合、これらの不正な文字を順番に置き換えて許可された文字に置き換えます。私はラムダを使いたい、と少し立ち往生悲しいことだ:
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;
}
ラムダ内部クエリ変数は、次のようなエラーが生じ、J8はと幸せではないです:
error: local variables referenced from a lambda expression must be final or effectively final
エラーメッセージには、あなたのラムダでは、外側のスコープの最終変数しか使用できないと言われています...?なぜ伝統的なfor-eachループを使用しないのですか? –
それを宣言する(または2番目の、最終的な変数を宣言すること)どちらもうまくやっていない、私はラムダが前進する方法だと思ったので、私はそれに行くことにしました... –
なぜ使いたいですか?ラムダ?文字を一度(一回)繰り返し、変換されたバージョンから新しい 'StringBuilder'を作成してください。すべてのタスクがlambdasに役立つわけではなく、これもその1つです。 – biziclop