如何将流Stream <HashMap <String,Object >>转换为HashMap数组HashMap <String,Object> []?

Art*_*hur 2 java java-8 java-stream

我是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;
        }
    });
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做

HashMap<String, Object>[] arr = imagesStream.toArray();
Run Code Online (Sandbox Code Playgroud)

抱歉,我的英语不好.

nos*_*sid 5

以下应该有效.不幸的是,您必须禁止未经检查的警告.

@SuppressWarnings("unchecked")
HashMap<String, Object>[] arr = imagesStream.toArray(HashMap[]::new);
Run Code Online (Sandbox Code Playgroud)

表达式HashMap[]::new是一个数组构造函数引用,它是一种方法引用.方法参考提供了实现功能接口的替代方法.您还可以使用lambda表达式:

@SuppressWarnings({"unchecked", "rawtypes"})
HashMap<String, Object>[] array = stream.toArray(n -> new HashMap[n]);
Run Code Online (Sandbox Code Playgroud)

在Java 8之前,您将使用匿名内部类来实现此目的.

@SuppressWarnings({"unchecked", "rawtypes"})
HashMap<String, Object>[] array = stream.toArray(new IntFunction<HashMap[]>() {
    public HashMap[] apply(int n) {
        return new HashMap[n];
    }
});
Run Code Online (Sandbox Code Playgroud)