次のような問題が発生しています。このCollectors.toList()は別々の文字列の代わりに、唯一1つの文字列"E1^E2^E3^E4"
を作成するいくつかの理由Java、Collectors.toList()は1つの要素しか作成しません
Map<String, List<String>> descriptions = new HashMap<>();
wordArray[2] = "D1_E1^E2^E3^E4~D2_E1^E2";
if(wordArray[2].contains("~")) {
Arrays.stream(wordArray[2].split("~"))
.forEach(s -> descriptions.put(s.split("_")[0],
s.split("_")[1].contains("^")
? Arrays.stream(s.split("_")[1].split("^"))
.collect(Collectors.toList())
: Arrays.asList(s.split("_")[1])));
}
:このタスクの点は、ストリームを使用することです。 私はこれが私が間違っているところです:Arrays.stream(s.split("_")[1].split("^"))
ですが、どこで正確に修正するのかわかりません。もっとので、これはうまく動作し、上記の1と非常によく似ているので:
List<String> synonyms = new ArrayList<>();
wordArray[3] = "S1_S2_S3_S4";
synonyms = wordArray[3].contains("_")
? Arrays.stream(wordArray[3].split("_")).
collect(Collectors.toList())
: Arrays.asList(wordArray[3]);
ありがとう!
'split()'パラメータは正規表現であり、 '^'は文字列の先頭と一致する特殊な一致パターンです。 '^'で分割するには、 'split(" \\^")'をエスケープします。 ---しかし、 'contains()'がfalseを返すときに入力に存在しないもので 'split()'を呼び出すと、入力全体で1要素の配列が返されます。 'contains()'呼び出しは時間の無駄です。 – Andreas
期待される出力は? – developer
@アンドレアス、ありがとう、それは問題でした!また、 'contains()'呼び出しがなくてもうまく動作するので、そのヒントもありがとう。 –