Java列表流,获取所有元素还是仅一个?

用户3921420:

我有一个返回元素的Arraylist的方法。有时我需要整个列表,有时只是检查结果列表是否不为空(只是布尔值)。

由于该方法执行繁重的任务来检查是否应将某些内容添加到结果列表中,因此如果该方法向列表中添加了一个元素,是否有办法中断该方法?

我想使用相同的方法,但是如果将一个元素添加到列表中有时会中断,有时让它完成所有工作(并添加其他所有内容)。

我可以传递一些布尔标志,这些标志将指示在添加第一个元素事件时该方法是否应该中断,但是我想知道是否有更优雅的解决方案(使用流或其他方法)。

我以伪代码为例。此方法是递归的,如果我在第一次迭代中添加一个元素,我希望(可选)避免其他递归调用:

List<String> getData(argument) {
  List<String> elements = new ArrayList<>;
  ... // do some heavy stuff that produces flag 'shouldAddElement'

  if (shouldAddElement) {
    elements.add('a');
  }

  if (someCondition) {
    elements.addAll(getData(argument));
  }

  return elements;
}
user7:

您可以将谓词shouldContinue(或什至等效地shouldStop)传递给方法,并基于对谓词的评估,可以决定继续/停止。

但是,将此参数添加到公共方法似乎不太合适,因此您可以创建两个方法-一个方法在添加一个元素后停止,而另一个方法继续继续(因为无论如何,调用者都需要决定是否在一个元素之后停止还是要在一个元素之后停止?继续前进(如果您决定传递标志)-因此,您可能有两种方法(IMO)。

List<String> getOneElementData(argument) {
    return getDataInternal(argument, elements -> elements.size < 1);
}

//You can even extend the above to take the desired final list size as a parameter
// and have the predicate as elements -> elements.size < desiredSize

List<String> getData(argument) {
      return getDataInternal(argument, elements -> true); //Always keep going
}

private List<String> getDataInternal(argument, Predicate<List<String>> shouldContinue) {
  List<String> elements = new ArrayList<>;
  ... // do some heavy stuff that produces flag 'shouldAddElement'

  if (shouldAddElement) {
    elements.add('a');
  }

  if (someCondition && shouldContinue.test(elements)) {
    elements.addAll(getData(argument));
  }

  return elements;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何仅返回数组的最后一个元素而不获取所有元素

如何使用Java 8和流将属性值从列表的第一个元素传播到所有列表元素?

获取列表列表并生成替换一个元素的所有变体

如何遍历列表的元组列表,并在python中一个接一个地获取所有元素?

获取列表中的所有元素,直到其结束或另一个参数 Python

如何获取嵌套列表中的所有元素,其中每个列表的第一个元素是特定数字?

Java的8流 - 如何合并从具有相同的字段列表中的元素,以一个元素和总结

使所有列表元素每行显示一个

Elixir-如何获取除列表中的最后一个元素以外的所有元素?

并行流中的流操作是否等到上一个流操作已处理所有元素

从Java列表中获取具有满足流条件的第n个元素的子列表

仅当另一个列表 Y 中的所有元素都没有出现时,返回列表 X 中的所有元素出现在列表 D 的子列表中的次数

如何获取所有第一个子元素的innerHTML作为列表或数据框

Java Stream:如何仅更改流的第一个元素?

检索列表列表中除一个元素外的所有元素(Python)

检查列表的所有元素是否都在一个大的单元素列表中

如何从流中仅提取一个允许的元素?

检查一个列表的每个元素是否是另一个列表的所有元素的倍数

jQuery(element)是一次选择一个元素还是一次选择所有元素?

如何将流中的所有元素简化为一个公共字段?

获取列表的最后一个元素

在列表中获取一个元素

Python:为列表中的每个元素获取一个没有该元素的新列表

对一个类的所有元素仅绑定一次处理程序

将列表的所有元素分别附加到python中另一个列表的所有元素

仅当存在第一个元素时才获取列表的组合

仅获取for循环python中列表的最后一个元素

如何在一个有序列表中插入一个新元素并移动Java中的所有其他对象?

jsonschema:仅包含一个默认元素的元素列表