将N个项目的集合转换为每个项目的N个集合?

时间:2014-07-24 00:25:14

标签: java

在Java中,有一种简单/方便的方法可以将N个项目的集合转换为N个集合,每个集合都有一个项目吗?我的意思是除了手动浏览集合中的每个项目并将其复制到新集合中。

2 个答案:

答案 0 :(得分:2)

以下是使用Java 8中的一个语句执行此操作的方法。l1是一些Collection<T>,结果是List<ArrayList<T>>,其中每个ArrayList<T>包含该系列中的一个元素。

List<ArrayList<T>> l2 = l1.stream().map(x -> new ArrayList<>(Arrays.asList(x))).collect(Collectors.toList());

分解,这:

  • 创建集合中所有元素的Stream;
  • 将每个元素映射到包含该元素的ArrayList;
  • 将生成的ArrayList收集到List<ArrayList>

答案 1 :(得分:0)

如果你愿意使用番石榴,你可以拥有Function&lt; E,列表&lt; E&gt;&gt;看起来像是:

public final class ItemToListFunction<E> implements Function<E, List<E>>
{
    public List<E> apply(E input)
    {
        //if it does not need to be mutable
        return Collections.singletonList(input);

        //if it does need to be mutable
        final List<E> list = new ArrayList<E>();
        list.add(input);
        return list;
    }
}

然后,您可以使用Collections2ListsIterables中的一种转换方法。 这种方法的优点是内部列表的创建被推迟到对元素进行实际迭代之前。