Collectors.toList() showing error "Expected 3 argument but found 1"

Viewed 1838

Why is my collect Collectors.toList() showing this error:

Expected 3 argument but found 1

package com.knoldus;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collector;
import java.util.stream.Collectors;
import java.util.stream.IntStream;


interface Cityeration<T> {
    public abstract List<T> Cityeration(List<T> first, List<T> Second);
}

public class ListMultiplication {
    public static void main(String s[]) {
        List firstList = Arrays.asList(1, 2, 3, 4, 5);
        List secondList = Arrays.asList(1, 2, 3, 4, 5);

        Cityeration c = (first, second) -> IntStream.range(0, first.size())
                        .map(i -> first.get(i) * second.get(i))
                        .collect(Collectors.toList());
    }
}
2 Answers
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

interface Cityeration<T> {
    public abstract List<T> cityeration(List<T> first, List<T> Second);
}

public class ListMultiplication {
    public static void main(String s[]) {
        List<Integer> firstList = Arrays.asList(1, 2, 3, 4, 5, 6);
        List<Integer> secondList = Arrays.asList(1, 2, 3, 4, 5);

        Cityeration<Integer> c = (first, second) -> IntStream
                .range(0, first.size() <= second.size() ? first.size() : second.size())
                .map(i -> first.get(i) * second.get(i)).boxed().collect(Collectors.toList());
        System.out.println(c.cityeration(firstList, secondList));
    }
}

Output:

[1, 4, 9, 16, 25]

Note: Make sure to

  1. use generic types instead of raw types.
  2. compare the sizes of the lists to avoid ArrayIndexOutOfBoundsException.

You seems to be using collect method of Intstream. This has 3 parameters. Had it been "Stream", it had single parameter as u expected.

Related