我写了以下代码
List<Integer> ll = new ArrayList<>();
numbers.forEach(n1 -> {
numbers.iterator().forEachRemaining((Consumer<? super Integer>) n2 -> {
numbers.iterator().forEachRemaining((Consumer<? super Integer>) n3 -> {
if (n1 + n2 + n3 == 1234)
ll.addAll(Arrays.asList(n1,n2,n3));
throw new RuntimeException("elements found");
});
});
});
我试着在一个数组中找到3个元素,它们的总和是1234。有没有更好的办法,终止最后一个先例?有没有更好的解决方案,使用streamapi,而不使用三个for循环(i,j,k)?
编辑:因为我得到了很多反馈,所以这段代码只是出于教育目的(更好地理解流和迭代器)。这不是解决问题的方法(在一个数组中找到三个构成1234之和的元素)。我假设foreachremaining将防止数组中元素的重复和-我错了,吸取了教训。
3条答案
按热度按时间qmb5sa221#
你喜欢吗
n3schb8v2#
如果您必须使用流来解决它(我认为只有出于教育目的才合理),那么您必须流式处理索引,而不是元素。否则,重复的元素会泄漏为错误的结果,正如我在下面的注解中所示。
建议您使用纯旧for循环的每个人(无论违反了什么规则)都是正确的。就用它吧。流是一个强大的概念,但用于不同类型的任务比你。
kt06eoxx3#
你可以这样做: