【问题标题】:Java programs about generics [closed]关于泛型的 Java 程序 [关闭]
【发布时间】:2017-02-17 14:49:42
【问题描述】:

使用泛型计算一个元素在任意数组中的出现次数 输入。

count方法的签名如下:

public static <T> int count(T[] array, T item)

【问题讨论】:

  • 问题是什么?
  • 您是否不小心过早地提交了问题?
  • 这是你可以用java做的事情,有什么问题吗?
  • 你已经尝试过做什么?请提供stackoverflow.com/help/mcve
  • 好的,那么到目前为止您尝试过什么?还是您只是希望这里有人会回答您的作业?

标签: java arrays generics


【解决方案1】:

使用 java 8 & Object,实际上不需要泛型:

public static int count(Object[] array, Object item){
    if(item == null){
        return Math.toIntExact(Arrays.asList(array).stream().filter(e -> e == null).count());
    }
    return Math.toIntExact(Arrays.asList(array).stream().filter(e -> item.equals(e)).count());
}

编辑:如果你真的想要泛型:

public static <T> int count(T[] array, T item){
    if(item == null){
        return Math.toIntExact(Arrays.asList(array).stream().filter(e -> e == null).count());
    }
    return Math.toIntExact(Arrays.asList(array).stream().filter(e -> item.equals(e)).count());
}

再次编辑: 如果 jdk 8 对你来说太多了:

public static <T> int count(T[] array, T item){
    boolean isNull = item == null;
    int c = 0;
    for(int i =0; i < array.length; i++ ){
        if(isNull && array[i] == null){
            c++;
        } else if(item.equals(array[i])) {
            c++;
        }
    }
    return c;
}

【讨论】:

  • 但是如何在没有内置函数的情况下计算数组中某个元素的出现次数?
  • 参考我的新编辑。
  • 谢谢你。先生.. 但是布尔 isNull = item == null;我不明白..你能解释一下吗??
  • 好吧,你不能要求一个空指针来执行 .equals() 方法。因此,如果您要检查的项目为空,则检查“item.equals(array[i])”将中断。您需要单独检查 null 大小写。我刚刚创建了一个等于“item == null”的布尔值,以避免一次又一次地检查 null。
  • 是的,我明白了..谢谢..
猜你喜欢
  • 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
相关资源
最近更新 更多