当前位置: 首页 > 面试题库 >

可重用的方法来转换Iterable 到T []?

元昊苍
2023-03-14
问题内容

我正在尝试编写一个通用方法以数组形式返回Iterable的内容。

这是我所拥有的:

public class IterableHelp
{
    public <T> T[] toArray(Iterable<T> elements)
    {
        ArrayList<T> arrayElements = new ArrayList<T>();
        for(T element : elements)
        {
            arrayElements.add(element);
        }

        return (T[])arrayElements.toArray();
    }
}

但是我收到一个编译器警告“注意:… \ IterableHelp.java使用未经检查或不安全的操作。”

对于避免这种警告的其他方法有何想法?


问题答案:

Iterables.toArrayGoogle Guava中有一种方法。

查看源代码,其定义为:

  /**
   * Copies an iterable's elements into an array.
   *
   * @param iterable the iterable to copy
   * @param type the type of the elements
   * @return a newly-allocated array into which all the elements of the iterable
   *     have been copied
   */
  public static <T> T[] toArray(Iterable<? extends T> iterable, Class<T> type) {
    Collection<? extends T> collection = toCollection(iterable);
    T[] array = ObjectArrays.newArray(type, collection.size());
    return collection.toArray(array);
  }

ObjectArrays.newArray最终委托给方法的样子:

  /**
   * Returns a new array of the given length with the specified component type.
   *
   * @param type the component type
   * @param length the length of the new array
   */
  @SuppressWarnings("unchecked")
  static <T> T[] newArray(Class<T> type, int length) {
    return (T[]) Array.newInstance(type, length);
  }

因此,似乎无法@SuppressWarnings完全避免,但是您可以并且至少应该将其限制在最小范围内。

或者,更好的是,仅使用其他人的实现!



 类似资料:
  • 问题内容: 在我的应用程序中,我使用3rd party库(确切地说是MongoDB的Spring数据)。 该库的方法返回,而我的其他代码则期望。 有什么实用方法可以让我快速将一个转换为另一个吗?我想避免foreach在代码中创建这么简单的循环。 问题答案: 在JDK 8+中,不使用任何其他库: 编辑:上面的是Iterator。如果您正在处理Iterable,

  • 我有一个简单的循环,将元素从一个

  • 问题内容: 我有一个返回的接口。 我想使用Java 8 Stream API处理该结果。 但是Iterable不能“流式传输”。 任何想法如何将Iterable用作流而不转换为List? 问题答案: 有一个比直接使用更好的答案,这既简单又得到更好的结果。 Iterable有一个方法,所以你应该使用该方法来获取分离器。在最坏的情况下,它是相同的代码(默认实现使用),但是在更常见的情况下,你已经是一个

  • 我有一个返回的接口。 然而迭代不能“流”。 知道如何使用迭代作为流而不将其转换为列表吗?

  • 本文向大家介绍在Java中将Iterator转换为Iterable,包括了在Java中将Iterator转换为Iterable的使用技巧和注意事项,需要的朋友参考一下 假设以下是具有整数值的迭代器- 现在,将Iterator转换为Iterable- 示例 以下是在Java中将Iterator转换为Iterable的程序- 输出结果

  • 所以我在自定义滑块视图上有这个监听器。当用户滑动滑块时,视图调用“滑块”。当滑块更改时,我正在尝试进行网络调用,但我不想进行一百万次网络调用,因为该方法在滑动时经常被调用。如何使此侦听器回调为可观察量?我知道一旦它是可观察的,我就可以使用去抖动,并且仅在一定的时间间隔后更新。 我试着做了< code>Observable.create(),但是我在一个回调方法中,我不知道如何工作。我用的是Kotl