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