如何将二维数组转换为Set?

时间:2019-01-17 06:26:41

标签: java multidimensional-array set

在示例中,我有Foo个对象,然后在二维数组Foo中有一些Foo[][]数据。我想将其转换为Set<Foo>,以便仅获取Set of Foo唯一数据。我该怎么办?

2 个答案:

答案 0 :(得分:1)

一个简单的(但不是最佳性能的)解决方案是使用Java流:

Set<Foo> set = Arrays.stream(array)
    .flatMap(Arrays::stream)
    .collect(Collectors.toSet());

以上代码段首先使用Stream<Foo[]>语句创建一个Arrays.stream(array)

然后使用第二条语句Stream<Foo>将其流化为.flatMap(Arrays::stream),其行为与.flatMap(arr -> Arrays.stream(arr))相同。

最后,它使用Set<Foo>从扁平化流中创建一个.collect(Collectors.toSet())

我建议深入了解Java 8引入的Java Streaming API。它不仅可以将2d数组映射到Set中,还可以做更多的事情。


另一种方法是使用2个嵌套的for循环:

Set<Foo> set = new HashSet<>(); // or LinkedHashSet if you need a similar order than the array
for(Foo[] inner : array) {
    for(Foo item : inner) {
        set.add(item);
    }
}

答案 1 :(得分:0)

public <T> List<T> twoDArrayToList(T[][] twoDArray) {
    List<T> list = new ArrayList<T>();
    for (T[] array : twoDArray) {
        list.addAll(Arrays.asList(array));
    }
    return list;
}