TreeNode[] children = grid[row][col].getChildren();
我想一个简单的函数,能告诉我有多少个对象在此数组中? getChildren()
将返回大小没有大于4的对象,例如:像array.length函数不包含NULL元素?
children[0] = null;
children[1] = TreeNode Object
children[2] = null;
children[3] = null;
TreeNode[] children = grid[row][col].getChildren();
我想一个简单的函数,能告诉我有多少个对象在此数组中? getChildren()
将返回大小没有大于4的对象,例如:像array.length函数不包含NULL元素?
children[0] = null;
children[1] = TreeNode Object
children[2] = null;
children[3] = null;
你为什么不把它写自己:
public static <T> int getLength(T[] arr){
int count = 0;
for(T el : arr)
if (el != null)
++count;
return count;
}
这应该工作。基本上与为您编写的函数相同,而不是特定的TreeNode。
int initLength(Object[] myArray) {
int count = 0;
for (Object obj : myArray) {
if (obj != null) count++;
}
return count;
}
我把它称为initLength,因为这些项目是init'd,但称它为你喜欢的。有些人会说,当你定义它的时候,它是init'd,无论内容是否为空。
其他替代:
ArrayList l = new ArrayList(Arrays.asList(children));
l.removeAll(Collections.singleton(null));
l.size();
或许矫枉过正使用谓词,但这里有一个番石榴解决方案:
int numNotNull = Iterables.size(Iterables.filter(Arrays.asList(children),
Predicates.notNull()));
在Java 8中,您可以使用Math.toIntExact和Arrays.stream构建一个漂亮的单行:
Math.toIntExact(Arrays.stream(row).filter(s -> s != null).count())
有谁知道这是不是更好,性能明智的,比自己写一个循环? –
几乎肯定不是。由于数组已经被分配,所以你不会看到使用流的任何性能改进。当这种事情真正的亮点,当你从如文件或套接字的I/O流(或一些其他类型的来源可以阅读懒洋洋的)读的 – mumrah
所以你会想'children.mySizeMethod()'返回4或1(或别的东西,Ë VEN)? –
考虑使用'List'或'Map'代替普通老式阵列。 Collections API提供了许多有用的类和方法。 – BalusC
(@BalusC - 真的......但有没有“有多少非空元素”的方法......假设这就是他的询问。) –