我是Java 8 Streams的新手。请告知,如何将流Stream<HashMap<String, Object>>
转换为HashMap数组HashMap<String, Object>[]
?
例如,我在代码中有一些流:
Stream<String> previewImagesURLsList = fileNames.stream();
Stream<HashMap<String, Object>> imagesStream = previewImagesURLsList
.map(new Function<String, HashMap<String, Object>>() {
@Override
public HashMap<String, Object> apply(String person) {
HashMap<String, Object> m = new HashMap<>();
m.put("dfsd", person);
return m;
}
});
我怎么能做像
这样的事情HashMap<String, Object>[] arr = imagesStream.toArray();
抱歉我的英语不好。
答案 0 :(得分:5)
以下内容应该有效。不幸的是,您必须禁止未选中警告。
@SuppressWarnings("unchecked")
HashMap<String, Object>[] arr = imagesStream.toArray(HashMap[]::new);
表达式HashMap[]::new
是数组构造函数引用,它是一种方法引用。 方法引用提供了实现功能接口的替代方法。您还可以使用lambda表达式:
@SuppressWarnings({"unchecked", "rawtypes"})
HashMap<String, Object>[] array = stream.toArray(n -> new HashMap[n]);
在Java 8之前,你会为此目的使用匿名内部类。
@SuppressWarnings({"unchecked", "rawtypes"})
HashMap<String, Object>[] array = stream.toArray(new IntFunction<HashMap[]>() {
public HashMap[] apply(int n) {
return new HashMap[n];
}
});