【问题标题】:Collectors.toList() showing error "Expected 3 argument but found 1"Collectors.toList() 显示错误“预期 3 个参数但找到 1”
【发布时间】:2020-02-27 16:51:26
【问题描述】:

为什么我的收藏Collectors.toList() 显示这个错误:

预期有 3 个参数,但找到了 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());
    }
}

【问题讨论】:

  • 您使用的是IntStream。它没有.collect(Collector&lt;...&gt;) 方法,是吗?似乎您希望使用可用于Stream&lt;T&gt;的收集器
  • .boxed()放在收集之前。
  • (或者用mapToObj代替map

标签: java collections java-stream


【解决方案1】:
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));
    }
}

输出:

[1, 4, 9, 16, 25]

注意:确保

  1. 使用泛型类型而不是原始类型。
  2. 比较列表的大小以避免ArrayIndexOutOfBoundsException

【讨论】:

  • 感谢您将泛型类型添加到 firstList 和 secondList。同样,我认为Cityeration c 应该是Cityeration&lt;Integer&gt; c
  • @VGR - 感谢您的关注。我已根据您的建议更新了答案。
  • 感谢@Holger 指出。我已更新我的答案以纳入您的评论。
  • 您还必须从列表中删除第 3 点(或将其设为 1 3)。进一步注意,除了.map(...).boxed(),您还可以使用.mapToObj(...)
  • 再次感谢@Holger。我现在已经做出改变了。
【解决方案2】:

您似乎正在使用 Intstream 的 collect 方法。这有 3 个参数。 如果它是“Stream”,它有你所期望的单个参数。

【讨论】:

    猜你喜欢
    • 2021-04-18
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 2018-05-19
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    相关资源
    最近更新 更多