java - Java Stream API 查找包含字符列表的单词
问题描述
我正在学习 Java 8,我试图减少对 for 循环的使用,并使我的代码看起来很干净。我正在尝试找出解决以下问题的方法。我有一个单词列表和一个字符数组,例如:
List<String> words = new ArrayList<>();
words.add("go");
words.add("me");
words.add("boy");
words.add("ate");
words.add("mate");
words.add("goal");
char[] required_chars = {'e', 'o', 'b', 'a', 'm', 'g', 'l'} ;
输出应该是 (go, me, goal),因为这些单词包含 required_chars 数组中的字符/字母。它应该只严格使用数组中的元素。我怎样才能做到这一点?
解决方案
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
public class FilterListStreamWithCharArray {
public static void main(String[] args) {
List<String> words = new ArrayList<>();
words.add("go");
words.add("me");
words.add("boy");
words.add("ate");
words.add("mate");
words.add("goal");
char[] required_chars = { 'e', 'o', 'b', 'a', 'm', 'g', 'l' };
Set<Character> requiredCharsAsSet = getBoxedChars(required_chars);
List<String> filteredWords = words.stream().filter(eachElement -> {
char[] eachElementsCharArray = eachElement.toCharArray();
Set<Character> eachElemenstCharAsSet = getBoxedChars(eachElementsCharArray);
if (requiredCharsAsSet.containsAll(eachElemenstCharAsSet)) {
return true;
}
return false;
}).collect(Collectors.toList());
System.out.println(filteredWords);
}
private static Set<Character> getBoxedChars(char[] charArray) {
Set<Character> resultSet = new HashSet<>();
for (int i = 0; i < charArray.length; i++) {
resultSet.add(new Character(charArray[i]));
}
return resultSet;
}
}
推荐阅读
- reactjs - 在功能组件 ReactJS 上更新数组
- jekyll - 将 Markdown 导出到 GitHub Pages 时处理内部 git-repository 链接
- docker - Visual Studio docker-compose 正在覆盖容器 COMMAND
- google-analytics - 增强型电子商务列表归因不适用于 Measurement Protocol HTTP 请求
- javascript - 怎么让它有图片,文字会根据图片自动变化
- neo4j - Neo4J Movie-Graph - 同龄演员
- javascript - ReactJS:不同事件之间的 setState 问题
- batch-file - MONTH 变量现在有问题
- php - 如何通过相关模型实现的接口来测试验证多态关系的模型?
- firebase - Flutter FirebaseException(核心/未初始化异常