如何使用 java 流从现有列表转换创建的新匹配值列表

how to convert created new list of matched values from existing list using java stream

目前我使用嵌套的 for-each 循环来实现相同的目的。

List<String> valueListToBeFilter = Arrays.asList("8 digit mobile number", "Please enter mobile number.");
List<String> newfoundValueList = new ArrayList<>();

for (String value : valueListToBeFilter) {
    for (WebElement element : _webElementsErrorList) {
        if (element.getText().contains(value))
            newfoundValueList.add(element.getText());
    }
}
newfoundValueList.forEach(System.out::println);

我得到了所需的结果,但如何使用流实现相同的结果

应该与 .flatMapWebElement-List 的另一个流一起工作,如下所示:

List<String> newfoundValueList = valueListToBeFilter.stream()
    .flatMap(value -> _webElementsErrorList.stream()
        .filter(element -> element.getText().contains(value))
        .map(element -> element.getText()))
    .collect(Collectors.toList());

在“嵌套”流中交换 mapfilter 可能会更好,以进一步减少代码,但通常这是一个小改进:

List<String> newfoundValueList = valueListToBeFilter
    .stream()
    .flatMap(value -> _webElementsErrorList
        .stream()
        .map(WebElement::getText)
        .filter(elementText -> elementText.contains(value))
    )
    .collect(Collectors.toList());