To change the structure of value in map using Java8 Stream stream operation
Map < String,List < String > replace with Map < String,Java >
the original data structure is as follows:
Map < String,String > map=new LinkedMultiValueMap < > ();
map.add ("java", "1.7");
map.add ("java", "1.8");
the map after adding data is: < String,List < String > > the same key value is collected by list
now want to use stream stream operation, will:
Map < String,List < String > map-> Map < String,Java > map
The structure of
Java is as follows:
public class Java {
private List<String> versions;
}
Thank you for the invitation
according to the description of the subject, I feel that it is actually a process of transforming map
into map
. What can be seen is value
, but key
remains unchanged. Here map
also provides a disguised way to transform the data in map
into stream
, and there is no direct map.stream ()
method.
the map
loop used entrySet
of map
, but the entrySet
here is a collection, so you can use stream
.
Map<String,List<String>> map = new HashMap<>();
map.put("java", Arrays.asList("1.7", "1.8"));
map.entrySet().stream()
at this time, the data in the stream map.entrySet (). Stream ()
is Map.Entry < String,List < String > >
. Now, in fact, we want to convert Map.Entry < String,List < String > >
into Map < String,Java >
. Since the final result is collected with map
, we can only collect (Collectors.toMap ())
).
Map<String, Java> collect = map.entrySet().stream()
.collect(Collectors.toMap(
stringListEntry -> stringListEntry.getKey(),
stringListEntry -> new Java(stringListEntry.getValue())));
Collectors.toMap
the method of two parameters, the first parameter represents how to obtain key
, the second represents how to obtain value
, because key
has not changed, so directly take the key, value
of entry
into Java
object, so I wrote a constructor (I annotated it with lombok
)
@Getter
@Setter
@AllArgsConstructor
public static class Java{
private List<String> versions;
}
that's about it, for reference only ^ _ ^