Java Stream Collectors. Tolist() does not compile

Anyone can explain why the following code can't be compiled, but what about the second code?

Do not compile

private void doNotCompile() {

    List<Integer> out;
    out = IntStream
            .range(1,10)
            .filter(e -> e % 2 == 0)
            .map(e -> Integer.valueOf(2 * e))
            .collect(Collectors.toList());

    System.out.println(out);
}

Compile errors on collection lines

>Method collect (supplier, objintconsumer, biconsumer) in intstream type is not applicable to parameter (Collector >) > type mismatch: cannot convert > from collector to supplier

compile

private void compiles() {
    List<Integer> in;

    in = Arrays.asList(1,2,3,4,5,6,7,8,9);
    List<Integer> out;
    out = in.stream()
            .filter(e -> e % 2 == 0)
            .map(e -> 2 * e)
            .collect(Collectors.toList());

    System.out.println(out);
}

Solution

Intstream does not accept the collector's collect method If you want a list < integer >, you must package intstream into a stream < integer >:

out = IntStream
        .range(1,10)
        .filter(e -> e % 2 == 0)
        .map(e -> 2 * e)
        .@R_786_2419@ed()
        .collect(Collectors.toList());

. map().@ R_ 786_ 2419@ed The alternative to () is maptoobj ():

out = IntStream
        .range(1,10)
        .filter(e -> e % 2 == 0)
        .mapToObj(e -> 2 * e)
        .collect(Collectors.toList ());

Alternatively, you can use the intstream collection method:

out = IntStream
        .range(1,10)
        .filter(e -> e % 2 == 0)
        .map(e -> 2 * e)
        .collect(ArrayList<Integer>::new,ArrayList::add,ArrayList::addAll);
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
分享
二维码
< <上一篇
下一篇>>