【发布时间】:2021-01-15 03:58:53
【问题描述】:
我正在学习 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 数组中的字符/字母。它应该只严格使用数组中的元素。 我怎样才能做到这一点?
【问题讨论】:
-
您确实需要尝试一些代码,我认为不太可能有人会为您编写整个代码。
-
@markspace 我试图检查每个字符是否包含在列表的每个元素中。但如果他们所有人都可以一起将这个词作为输出输出,我无法实现。
-
最简单的:
words.stream().filter(s -> s.matches("["+new String(required_chars)+ "]+")) .forEach(System.out::println);如果要避免不必要的重复工作,可以使用Pattern p = Pattern.compile("["+new String(required_chars)+ "]+"); words.stream().filter(s -> p.matcher(s).matches()).forEach(System.out::println);,从Java 11开始,可以使用.filter(p.asMatchPredicate())代替.filter(s -> p.matcher(s).matches())。
标签: java lambda java-8 java-stream