【问题标题】:Select positives from a list with Generics从具有泛型的列表中选择正数
【发布时间】:2021-12-29 19:09:27
【问题描述】:

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

方法的基础应该是这样的:

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;
    }

显然这不起作用,所以我将非常感谢任何帮助。 谢谢, 阿尔玛

【问题讨论】:

  • 您需要通用参数T 的上限:T extends Number。有关详细信息,我建议阅读有关该主题的教程,例如this one from oracle.com.

标签: java list generics numbers


【解决方案1】:

使用 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 可以应用于给定的输入/输入的可变副本:

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;
}

【讨论】:

    【解决方案2】:

    我修改了您的代码,使其返回一个正数列表。

        //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]
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 我不明白为什么我得到-2,这是程序背后的逻辑
      • 1.这是一种检查数字是否为负的低效方法,只需检查它是否小于 0。 2. 这个问题是关于 Java 泛型的,而不是关于检查数字是否小于 0 的逻辑。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多