Java 函数类似于array.length,它不';不包括空元素?

Java 函数类似于array.length,它不';不包括空元素?,java,arrays,null,Java,Arrays,Null,我想要一个简单的函数,可以告诉我这个数组中有多少个对象getChildren()将返回大小不大于4的对象,例如: TreeNode[] children = grid[row][col].getChildren(); 你为什么不自己写呢: children[0] = null; children[1] = TreeNode Object children[2] = null; children[3] = null; publicstaticintgetlength(T[]arr){ 整数计数

我想要一个简单的函数,可以告诉我这个数组中有多少个对象
getChildren()
将返回大小不大于4的对象,例如:

TreeNode[] children = grid[row][col].getChildren();

你为什么不自己写呢:

children[0] = null;
children[1] = TreeNode Object
children[2] = null;
children[3] = null;
publicstaticintgetlength(T[]arr){
整数计数=0;
对于(T el:arr)
如果(el!=null)
++计数;
返回计数;
}

这应该行得通。本质上与为您编写的函数相同,而不是特定于TreeNode的函数

public static <T> int getLength(T[] arr){
    int count = 0;
    for(T el : arr)
        if (el != null)
            ++count;
    return count;
}
我称之为initLength,因为这些项目是init'd的,但可以随意调用。有些人会在定义它时说它是init'd,不管内容是否为null。

其他选择:

int initLength(Object[] myArray) {
  int count = 0;
  for (Object obj : myArray) {
    if ( obj != null ) count++;
  }
  return count;
}

使用谓词可能有些过分,但这里有一个番石榴解决方案:

ArrayList l = new ArrayList(Arrays.asList(children));
l.removeAll(Collections.singleton(null)); 
l.size();
在Java 8中,您可以使用和构造一个漂亮的单行程序:

int numNotNull = Iterables.size( Iterables.filter( Arrays.asList( children ),
                        Predicates.notNull() ));
代码:


那么,你想让<代码>子。MysiZeMeMod()/Cuth>返回4或1(或者甚至其他东西)吗?考虑使用<代码>列表< /C> >或<代码> MAP>代码>,而不是一个简单的老数组。Collections API提供了很多有用的类和方法。(@BalusC-true…但是没有“多少非空元素”方法…假设这是他的问题。)有人知道这是否比自己编写循环更好,性能更好吗?几乎肯定没有。因为已经分配了阵列,所以使用流不会带来任何性能改进。当您从I/O流(如文件或套接字(或其他可以懒洋洋地读取的源代码))中读取数据时,这种事情才真正引人注目
Math.toIntExact(Arrays.stream(row).filter(s -> s != null).count())
Arrays.stream(list).filter(e -> e != null).count();