Select 个来自泛型列表的肯定

Select positives from a list with Generics

我是新来的,所以如果你不明白我的问题,请原谅。(友善 :D) 所以基本上我必须制作一个方法,该方法 select 使用泛型从列表中确定“数字”。

方法的基础应如下所示:

public static <T> List<T> selectPositives(List<? extends Number> list) {

        T positiveNumber = null;
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i) > 0) {
                return (List<T>) positiveNumber;
            }
        }
        return (List<T>) positiveNumber;
    }

很明显这行不通,所以我将不胜感激任何帮助。 谢谢, 阿尔玛

检查数字的绝对值,然后将其与没有绝对值的数字进行比较。如果它们匹配,则为正,如果不匹配,则为负。

将匹配到另一个列表的元素添加到列表中的所有正数

我修改了您的代码,使其成为 return 正数列表。

    //public static <T> List<T> selectPositives(List<? extends Number> list) {
    public static <T extends Number> List<T> selectPositives(List<T> list) {
        //T positiveNumber = null;
        List<T> positiveNumbers = new ArrayList<>();
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).doubleValue() > 0) {
                //return (List<T>) positiveNumber;
                positiveNumbers.add(list.get(i));
            }
        }
        return positiveNumbers;
    }

    public static void main(String[] args) {
        
        List<Number> list = List.of(-1,-2,1.5, 3,-4,-5, 6);
        System.out.println(selectPositives(list));
    }

输出:

[1.5, 3, 6]

使用 Stream API,可以从输入中过滤掉正列表:

public static <T extends Number> List<T> selectPositives(List<T> list) {
    return list.stream()
        .filter(x -> x.doubleValue() > 0.0)
        .collect(Collectors.toList());
} 

此外,具有反转条件的 List::removeIf 可以应用于输入的给定 input/mutable 副本:

public static <T extends Number> List<T> selectPositives(List<T> list) {

    List<T> result = new ArrayList<>(list);
    
    result.removeIf(x -> x.doubleValue() <= 0);
    
    return result;
}