Java streams – how to use conditions on keys to translate all values in a collection map

I have a map Let's talk

Map<Long,List<MyObj>>

I want to create a long array in all myobjs, where the key (long) is found in another set ()

anotherSet.contains(long)

Use Java streams

I tried

map.entrySet()
   .stream()
   .filter(e->anotherSet(e.getKey()))
   .flatMap(e.getValue)
   .collect(Collectors.toList);

But it didn't even compile

Solution

You have some grammatical mistakes

This should produce the list you want:

List<MyObj> filteredList = 
    map.entrySet()
       .stream()
       .filter(e->anotherSet.contains(e.getKey())) // you forgot contains
       .flatMap(e-> e.getValue().stream()) // flatMap requires a Function that 
                                           // produces a Stream
       .collect(Collectors.toList()); // you forgot ()

If you want to generate an array instead of a list, use:

MyObj[] filteredArray = 
    map.entrySet()
       .stream()
       .filter(e->anotherSet.contains(e.getKey()))
       .flatMap(e-> e.getValue().stream())
       .toArray(MyObj[]::new);
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>