Que*_*inb 5 java startswith java-8 java-stream
我有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());
Run Code Online (Sandbox Code Playgroud)
上面的代码运行没有错误,但是filteredList为空。显然我做错了。
filteredList应该仅包含:
1_约翰
9_苏珊
您调用startsWith
了错误的String
s(例如,您测试 if"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());
Run Code Online (Sandbox Code Playgroud)
PSStream.of(numberList.toArray(new String[0]))
是多余的。使用numberList.stream()
来代替。
归档时间: |
|
查看次数: |
99 次 |
最近记录: |