Arthur
Arthur

Reputation: 3473

How to Convert Stream Stream<HashMap<String, Object>> to HashMap Array HashMap<String, Object>[]?

I am newbie in Java 8 Streams. Please advice, how to Convert Stream Stream<HashMap<String, Object>> to HashMap Array HashMap<String, Object>[] ?

For example, I has some stream in code:

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;
        }
    });

How I can do something like

HashMap<String, Object>[] arr = imagesStream.toArray();

?

Sorry my bad English.

Upvotes: 2

Views: 2010

Answers (1)

nosid
nosid

Reputation: 50044

The following should work. Unfortunately, you have to suppress the unchecked warning.

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

The expression HashMap[]::new is an array constructor reference, which is a kind of method reference. Method references provide an alternative way to implement functional interfaces. You can also use a lambda expression:

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

Before Java 8, you would have used an anonymous inner class for that purpose.

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

Upvotes: 5

Related Questions