Transform a set into a map using the current lambda API

Ali Ebrahimi ali.ebrahimi1781 at gmail.com
Tue Mar 26 13:37:04 PDT 2013


Hi,
another solution with collect method:

names = properties.stream().collect(HashMap<String, Property>::new , ( m
,p)-> {m.put(p.name,p); } ,( m , n) -> {m.putAll(n); });

Ali Ebrahimi
On Wed, Mar 27, 2013 at 12:43 AM, Ali Ebrahimi
<ali.ebrahimi1781 at gmail.com>wrote:

> Hi,
> this is an ugly solution:
>
> Map<String, Property> names = properties.stream().reduce(new HashMap<>(),
> ( u,  t) -> {
>             u.put(t.name, t);
>             return u;
>         }, (m, n) -> {
>             m.putAll(n);
>             return m;
>         });
>
>
>
> Ali Ebrahimi
>
> On Tue, Mar 26, 2013 at 10:48 PM, Marcos Antonio <
> marcos_antonio_ps at hotmail.com> wrote:
>
>>
>> Hello!
>>
>> Suppose this simple POJO:
>>
>> public class Property
>> {
>>     public String name;
>>     public Object value;
>>     @Override
>>     public boolean equals(Object obj)
>>     {
>>         if (this == obj)
>>         {
>>             return true;
>>         }
>>         if (obj == null || getClass() != obj.getClass())
>>         {
>>             return false;
>>         }
>>
>>         Property another = (Property) obj;
>>         return name.equals(another.name);
>>     }
>>     @Override
>>     public int hashCode()
>>     {
>>         return name.hashCode();
>>     }
>> }
>>
>> and a set of them:
>>
>> Set<Property> properties = ...
>>
>> using the current lambda API, what's the easiest way to transform this set
>> in a map
>>
>> Map<String, Property> names = ...
>>
>> where the map key is the name field of the Property object and the map
>> value
>> is the Property object itself?
>>
>> Thank you.
>>
>> Marcos
>>
>>
>


More information about the lambda-dev mailing list