Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在同一方法中处理多种列表?_Java - Fatal编程技术网

Java 如何在同一方法中处理多种列表?

Java 如何在同一方法中处理多种列表?,java,Java,我目前拥有具有以下签名的方法: 公共静态列表keepList输入,谓词p 公共静态列表keepList输入,谓词p 公共静态列表keepList输入,谓词p 所有人都做同样的事情。如何在一个方法中处理这三种列表中的任何一种?我已经试过使用通配符了?运算符,但当我执行此操作时,会出现一个错误,即无法将CAP1对象添加到列表中 以下是其中一种方法的示例: public static List<?> keep(List<?> input, Predicate<?>

我目前拥有具有以下签名的方法:

公共静态列表keepList输入,谓词p

公共静态列表keepList输入,谓词p

公共静态列表keepList输入,谓词p

所有人都做同样的事情。如何在一个方法中处理这三种列表中的任何一种?我已经试过使用通配符了?运算符,但当我执行此操作时,会出现一个错误,即无法将CAP1对象添加到列表中

以下是其中一种方法的示例:

public static List<?> keep(List<?> input, Predicate<?> p) {
    List<?> keepList = new ArrayList<>();

    input.stream().filter((i) -> (p.test(i))).forEach((i) -> {
        keepList.add(i);
    });

    return keepList;
}
在此方法中,keepList.addi生成一个错误,该错误表示:

未找到适用于addCAP1的方法

方法Collection.addCAP2不适用 参数不匹配;对象无法转换为CAP2

方法List.addCAP2不适用 参数不匹配;对象无法转换为CAP2

其中,CAP1、CAP2是新类型变量: CAP1将对象从捕获扩展到

CAP2将对象从捕获扩展到

使用泛型方法

public static <T> List<T> method(List<T> list) {
    ...
}

如果需要的话,你可以用你对类所做的同样的方式来限制它;例如,T扩展数字或其他任何内容。

是的,纯粹基于类型签名,您可以使用泛型来实现这一点。为方法定义一个类型参数,并将其用作每个列表/谓词的类型

public static <X> List<X> keep(List<X> input, Predicate<X> p)

考虑到java.util.function.Predicate的工作方式和方法的名称,这可能足以使您的代码具有通用性,并将3个函数简化为一个函数。

这将有助于查看该错误和生成该错误的代码,以及了解该方法的功能。告诉我们他们都做同一件事并不能告诉我们他们实际上做了什么。发布一些代码。