【问题标题】:Cast nested List<List<T>> to nested ArrayList<ArrayList<T>>将嵌套 List<List<T>> 转换为嵌套 ArrayList<ArrayList<T>>
【发布时间】:2020-10-21 11:22:36
【问题描述】:

List&lt;List&lt;T&gt;&gt; 转换为ArrayList&lt;ArrayList&lt;T&gt;&gt; 的最佳/最佳方式是什么?

假设我有一个接口IFoo.getListOfLists(),它将给我List&lt;List&lt;T&gt;&gt;。我们还假设我知道这些List&lt;List&lt;T&gt;&gt; 实际上是ArrayList&lt;ArrayList&lt;T&gt;&gt; 的实例。

一个简单的解决方案是:

    ArrayList<ArrayList<T>> result = new ArrayList<>();
    for (List<T> arrayList : IFoo.getListOfLists()) {
        result.add((ArrayList<T>)arrayList);
    }

但是有更好的方法吗?特别是因为我已经知道实例实际上是ArrayLists。

【问题讨论】:

  • 为什么首先需要ArrayList&lt;ArrayList&lt;T&gt;&gt;
  • @NikolasCharalambidis 因为ArrayList 实现了SerializableList 没有。
  • 您可能会发现这很相关。 stackoverflow.com/questions/1387954/…
  • java.util.List 的所有标准实现都已经实现了 java.io.Serializable。如果您确定它是其中之一,则可以安全地投射。
  • Serializable 只是我使用的接口的一个约束。对于这个特定的用例,我真的不需要它。但感谢您提供的信息。

标签: java list arraylist casting


【解决方案1】:

由于List 的类型信息在运行时不存在,您可以简单地转换为ArrayList

import java.util.ArrayList;
import java.util.List;

public class CastListList {

    public static void main(final String[] args) {
        final List<List<String>> strings = new ArrayList<>();
        strings.add(new ArrayList<>());
        strings.get(0).add("Hello World!");

        final ArrayList<ArrayList<String>> arrayList = cast(strings);
        System.out.println(arrayList.get(0).get(0));
    }

    @SuppressWarnings({ "unchecked", "rawtypes" })
    private static <T> ArrayList<ArrayList<T>> cast(final List<List<T>> list) {
        return (ArrayList) list;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 2019-05-20
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多