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

标签 java multidimensional-array set

例如我有 Foo反对的话我有一些Foo二维数组内的数据 Foo[][] 。我想把它转换成Set<Foo>为了获得 Foo 唯一数据集。我怎样才能做到这一点?

最佳答案

一个简单(但不是性能最佳)的解决方案是使用 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);
    }
}

关于java - 如何将二维数组转换为Set?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54230148/

相关文章:

java - 如何让JTable在Eclipse中窗口最大化时自动调整大小

java - 任务 ':dex'的执行失败

java - 如何切换ImageButton的图片src

c++ - 将静态二维数组的行分配给另一个行

C - 将动态分配的 3D 矩阵传递给函数

Java - 包含整数列表的 TreeSet?

python - Python有有序集吗?

java - 如何使用jmockit模拟私有(private)类?

java - 展平不均匀数组 - 越界异常错误

language-agnostic - 高效集交集——判断交集是否大于k