Quentinb:
私は1つの番号と名前の他のAリストのリストが含まれ、2つのリストを持っています。私は、アンダースコアに続く最初のリストから番号と名前を接頭辞います。私は、最初のリストで見つかったすべての数字に基づいて、第2のリストをフィルタリングします。
私は試してみました。
List<String> numberList = new ArrayList<>();
numberList.add("1_");
numberList.add("9_");
List<String> nameList = new ArrayList<>();
nameList.add("1_John");
nameList.add("2_Peter");
nameList.add("9_Susan");
List<String> filteredList = Stream.of(numberList.toArray(new String[0]))
.filter(str -> nameList.stream().anyMatch(str::startsWith))
.collect(Collectors.toList());
エラーなしで実行上記のコードが、filteredListは空です。明らかに私は何かを間違っているのです。
filteredListしか含まれています
1_John
9_Susan
彼らは次のとおりでした:
あなたは呼んでstartsWith
間違った上でString
(たとえば、あなたがどうかをテストの"1_".startsWith("1_John")
代わりに"1_John".startsWith("1_")
)。
あなたは経由でストリーミングする必要がありnameList
、使用するnumberList
フィルタリングのために:
List<String> filteredList =
nameList.stream()
.filter(str -> numberList.stream().anyMatch(str::startsWith))
.collect(Collectors.toList());
PSはStream.of(numberList.toArray(new String[0]))
冗長です。使用numberList.stream()
代わりに。