【问题标题】:What is the best way to treat an object like an iterable in Java?在Java中将对象视为可迭代对象的最佳方法是什么?
【发布时间】:2017-10-27 20:33:12
【问题描述】:

将单个对象视为可迭代的最佳方法是什么?

比如下面这种情况……

public void fun(Object o) {
    fun(new TempList(o));
}

public void fun(Iterable<Object> os) {
    try {
    for(Object o : os)
        // Write to server
        System.out.println(o);
    } catch(Exception e) {
      // log e
    }
}

更新:
改写这部分。

一个函数已经存在,它接受一个可迭代的事物并处理它们 (fun(Iterable&lt;Object&gt; os))。我正在为这个函数添加一个别名,它取而代之的是一个项目 (fun(Object o))。这个函数会被不同的实例调用很多次,所以我想要最节省资源的方式来使用单个项目调用 Iterable 函数(无论创建的垃圾最少/清理得最快)。

或者,正如问题标题所说,Object 传递给需要Iterable&lt;Object&gt; 的函数的最佳方法是什么?

【问题讨论】:

  • 数组不是可迭代的,但您也可以在其上使用enhanced-for 语句。你到底想完成什么?
  • 另一种方法是使用Collections.singleton(o),它产生一个单项Set,它是一个Iterable。
  • “但该函数使用的资源是短暂的,但使用一个比使用许多垃圾资源更有效” - 不清楚,您能否进一步解释一下动机?
  • (我赞成 2 个完全有效但被否决的答案)
  • @HuguesMoreau:它们充其量是不完整的。根据 OP 尝试执行的操作,最好使用带有forEach 的流。我们所知道的是,他们正在尝试两种不同类型的事情,虽然我们可以提供数学上正确的解决方案,但最好让每个人都得到一个好的答案。

标签: java java-8 iterable


【解决方案1】:

也许你可以看看Collections.singletonList(object)

【讨论】:

  • 取决于用户在做什么。为他们的迭代目的创建一个流可能对他们更有利。虽然是的,但这样做的缺点是需要重复一些努力来获得正确类型的流,但它消除了对 OP 在这里尝试做的任何事情的混淆。
【解决方案2】:

使用Collections.singleton(item)

【讨论】:

  • 取决于用户在做什么。为他们的迭代目的创建流可能对他们更有利。虽然是的,但这样做的缺点是需要重复一些努力来获得正确类型的流,但它消除了对 OP 在这里尝试做的任何事情的混淆。
猜你喜欢
  • 2010-11-25
  • 1970-01-01
  • 1970-01-01
  • 2012-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-03
  • 2023-03-23
相关资源
最近更新 更多