java - Streams Collections.toMap() from List . How to keep the order? -


i creating map list follows :

map<string,itemvariant> map = itemext.getvariants()        .stream().map((extvar)->{              //convert variant              itemvariant itemvar = conversionservice.convert(extvar, itemvariant.class);              return itemvar;        }).collect(collectors.tomap(itemvariant::getsku, function.<itemvariant>identity())); 

i want keep same order in list: itemext.getvariants()

how create linkedhashmap using these collectors.tomap() functions ?

the 2 parameter version of collectors.tomap() following:

public static <t, k, u> collector<t, ?, map<k,u>> tomap(     function<? super t, ? extends k> keymapper,      function<? super t, ? extends u> valuemapper)  {     return tomap(keymapper, valuemapper, throwingmerger(), hashmap::new); } 

so can replace:

collectors.tomap(itemvariant::getsku, function.<itemvariant>identity()) 

with:

collectors.tomap(itemvariant::getsku,      function.<itemvariant>identity(),      (u, v) -> {         throw new illegalstateexception(string.format("duplicate key %s", u));     },      linkedhashmap::new) 

or make bit cleaner, write new tolinkedmap() method:

public class morecollectors {     public static <t, k, u> collector<t, ?, map<k,u>> tolinkedmap(         function<? super t, ? extends k> keymapper,         function<? super t, ? extends u> valuemapper)     {         return collectors.tomap(keymapper, valuemapper,                  (u, v) -> {                     throw new illegalstateexception(string.format("duplicate key %s", u));                 },                 linkedhashmap::new);     } } 

and use that.


Comments

Popular posts from this blog

node.js - Mongoose: Cast to ObjectId failed for value on newly created object after setting the value -

gradle error "Cannot convert the provided notation to a File or URI" -

python - NameError: name 'subprocess' is not defined -