首页 > 解决方案 > 如何重构在字符串列表中搜索文本的 for 循环

问题描述

我想重构下面的代码以利用 Stream() 方法,但不知道该怎么做。

给定变量 sentence 是一个字符串列表并预先填充:“Jack 去了公园”、“Mary 呆在家里”、“Chris 去上班了”

我将如何使用 Stream() 返回包含单词“home”的整行

List<String> sentences = new ArrayList<>();
sentences.add("Jack went to the park");
sentences.add("Mary stayed home");
sentences.add("Chris went to work");

for (int I=0; I < sentences.size(); I++) {
   if (sentences.get(I).contains("home")) {
      return sentences.get(I);
   }
}

标签: javafor-looparraylistrefactoringjava-stream

解决方案


sentences.stream()
    .filter(str -> str.contains("home"))
    .findAny()
    .orElse("String to return if string which contains home was not found");`

或者您可以检查 的结果Optional,此代码将完全等同于您的:

Optional<String> result = sentences.stream()
    .filter(str -> str.contains("home"))
    .findAny()

if (result.isPresent()) {
    return result.get();
}

推荐阅读