値のJavaの8ストリームとstartwithアレイを使用してリストをフィルタリングする方法

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()代わりに。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=178159&siteId=1