Convert old "into" code to the collectors

Michael Nascimento misterm at gmail.com
Wed Jan 16 08:10:55 PST 2013


Since you have an existing instance, you can do:

toCollection(() -> propriedades)

Regards,
Michael

On Wed, Jan 16, 2013 at 1:59 PM, Paul Sandoz <paul.sandoz at oracle.com> wrote:
> You are wiring up the wrong parameters to both toCollection and toList.
>
> Here are the relevant methods:
>
>     public static<T, C extends Collection<T>>
>     Collector<T,C> toCollection(Supplier<C> collectionFactory) {
>         return leftCombiningReducer(collectionFactory, Collection::add, Collection::addAll);
>     }
>
>     public static<T>
>     Collector<T,List<T>> toList() {
>         // @@@ Consider a tree-based List, if we can solve the post-processing problem
>         return toCollection(ArrayList<T>::new);
>     }
>
> The former takes a supplier:
>
>   Collectors.<...>toCollection(ArrayList<...>::new);
>
> The latter takes no parameters:
>
>   Collectors.<...>toList();
>
> Notice how the latter calls the former.
>
> Hth,
> Paul.
>
>
> On Jan 16, 2013, at 4:41 PM, Marcos Antonio <marcos_antonio_ps at hotmail.com> wrote:
>
>>
>> Here are the compiler error messages for the two case:
>>
>> List<PropriedadeChavePai> propriedadesChavePai = new ArrayList<>();
>>
>> chave.getPropriedadesChavePai().stream().
>>    map(PropriedadeChavePai::new).
>>    collect(Collectors.<PropriedadeChavePai>toCollection(propriedadesChavePai));
>>
>> [javac] C:\desenvolvimento\desktop\desenvolvimento\br\desenvolvimento\dados\CriadorChave.java:259: error: method toCollection in class Collectors cannot be applied to given types;
>> [javac]       collect(Collectors.<PropriedadeChavePai>toCollection(propriedadesChavePai));
>> [javac]                         ^
>> [javac]   required: Supplier<C>
>> [javac]   found: List<PropriedadeChavePai>
>> [javac]   reason: actual and formal argument lists differ in length
>> [javac]   where C,T are type-variables:
>> [javac]     C extends Collection<T> declared in method <T,C>toCollection(Supplier<C>)
>> [javac]     T extends Object declared in method <T,C>toCollection(Supplier<C>)
>> [javac] 1 error
>>
>> --------------------------------------------------------------------------
>>
>> List<PropriedadeChavePai> propriedadesChavePai = new ArrayList<>();
>>
>> chave.getPropriedadesChavePai().stream().
>>    map(PropriedadeChavePai::new).
>>    collect(Collectors.<PropriedadeChavePai>toList(propriedadesChavePai));
>>
>> [javac] C:\desenvolvimento\desktop\desenvolvimento\br\desenvolvimento\dados\CriadorChave.java:259: error: method toList in class Collectors cannot be applied to given types;
>> [javac]       collect(Collectors.<PropriedadeChavePai>toList(propriedadesChavePai));
>> [javac]                         ^
>> [javac]   required: no arguments
>> [javac]   found: List<PropriedadeChavePai>
>> [javac]   reason: actual and formal argument lists differ in length
>> [javac] 1 error
>>
>> Marcos
>>
>> ----------------------------------------
>>> Date: Wed, 16 Jan 2013 15:05:22 +0000
>>> From: maurizio.cimadamore at oracle.com
>>> To: marcos_antonio_ps at hotmail.com
>>> CC: lambda-dev at openjdk.java.net
>>> Subject: Re: Convert old "into" code to the collectors
>>>
>>> On 16/01/13 14:34, Marcos Antonio wrote:
>>>> Hello, everybody!
>>>>
>>>> Before build b73 I had code like this:
>>>>
>>>> List<PropriedadeChavePai> propriedades = new ArrayList<>();
>>>>
>>>> chave.getPropriedadesChavePai().stream().
>>>> map(PropriedadeChavePai::new).
>>>> into(propriedades);
>>>>
>>>> Now I'm having trouble trying to convert it to use the new Collectors. I have tried something like this:
>>>>
>>>> chave.getPropriedadesChavePai().stream().
>>>> map(PropriedadeChavePai::new).
>>>> collect(Collectors.toCollection(propriedades));
>>>>
>>>> but it didn't work and I couldn't figure out the right thing to do.
>>>>
>>>> Thank you in advance.
>>>>
>>>> Marcos
>>>>
>>> What do you mean it didn't work? Did you get an error message from the
>>> compiler? If so, can you please paste it?
>>>
>>> Maurizio
>>
>
>


More information about the lambda-dev mailing list