假设我有一个这样的类:
class ASDF {
int a;
int b;
int c;
}
ASDF[] myArray;
Run Code Online (Sandbox Code Playgroud)
还有一些相当大的ASDF阵列.有没有办法编写一个接受ASDF成员名称和ASDF数组的函数,并对给定成员名称的所有成员求和?
即,我想要一个像这样工作的函数:
sumMember(myArray, a);
Run Code Online (Sandbox Code Playgroud)
将返回ASDF中所有'a'成员变量的总和.但是,有三个以上的成员变量,因此为每个变量设置一个函数是不现实的.
你可以使用反射或地图或......
或者,如果你可以使用Java 8,你可以传递一个lambda来指向你感兴趣的成员.它不是你想要的那么短,但也不是太糟糕:
public static int sumMembers(ASDF[] array, ToIntFunction<ASDF> member) {
return Arrays.stream(array).mapToInt(member).sum();
}
Run Code Online (Sandbox Code Playgroud)
样品用途:
public static void main(String[] args) {
ASDF[] array = {new ASDF(), new ASDF()};
array[0].a = 1;
array[1].a = 2;
//THIS IS HOW YOU CALL IT
int sum = sumMembers(array, a -> a.a);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |