java - 如何重构在字符串列表中搜索文本的 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);
}
}
解决方案
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();
}
推荐阅读
- c# - 如何压缩base64字符串
- android - windowLightNavigationBar 在 Android 10 (Q) 上不起作用
- symfony - Mink / behat javascript错误未找到简单场景的元素
- javascript - 如何在反应打字稿中将输入值从孩子传递给父母
- spring - Spring Boot 开发人员应该知道什么?
- java - kaptGenerateStubs 任务抛出 java.lang.StackOverflowError
- c# - 从 AJAX 返回的部分视图是否可以访问模型参数?
- python - k-means 返回 nan 值?
- javascript - Javascript:通过内部的onclick返回函数增加循环索引
- python - Python:如何将 pyautogui.locateOnScreen 中的左侧或顶部作为 int?