我想知道如何在Java 8中使用

时间:2015-12-10 14:23:40

标签: for-loop foreach filter java-8 java-stream

我想知道如何在Java 8中使用。 我想将流用于现有句子。

List<t> selected;
List<t> filtered;

for (int count = 0; count < selected.size(); count++) {
                if(!StringUtils.endsWithIgnoreCase(selected.get(count).getBasic(), "1")) {

            for (int t = 0; t < filtered.size(); t++) {
                if (StringUtils.endsWithIgnoreCase(selected.get(count).getTitle(), filtered.get(t).getTitle())) {
                    selected.set(count, filtered.get(t));
                }
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

在您修改现有List时,应使用List.replaceAll代替Stream API。但是,Stream API可以用作内循环的替代:

selected.replaceAll(sel ->
    StringUtils.endsWithIgnoreCase(sel.getBasic(), "1") ? sel :
      filtered.stream()
              .filter(fil -> StringUtils.endsWithIgnoreCase(sel.getTitle(), fil.getTitle())
              .findFirst()
              .orElse(sel)
);

请注意,与您的代码相比,它有点不同,因为您的内部循环不会像.findFirst()那样短路:即使找到匹配后,它仍继续在filtered列表中搜索。如果是故意的,您应该在我的解决方案中将.findFirst()替换为.reduce((a, b) -> b)以获得相同的结果。