2

假设我有一个类中的对象数组MyClass

MyClass myClassArray[] = {
  new MyClass(0, 1),
  new MyClass(2, 3),
  new MyClass(4, 5),
  new MyClass(6, 7)
};

在这里,MyClass构造函数填充了两个字段,我们称之为field1field2。现在假设我要填充一个数组,其中包含field1来自每个对象的值myClassArray(因此该数组将包含这些值0, 2, 4, 6)。以下不起作用:

field1Array = myClassArray.getField1();

是否有一种快速的 1 行方法可以使用属于原始数组中对象的方法的返回码来填充新数组?显然,我可以使用for循环来做到这一点,但我宁愿利用语言的特性,如果它们存在的话。

4

4 回答 4

4

您将需要循环,除非您使用的 Java 8+ 将lambda 表达式添加到语言中,在这种情况下,您可以将数组映射到新数组:

int[] field1Array = Arrays
                      .stream(myClassArray)
                      .mapToInt(MyClass::getField1)
                      .toArray();

这无疑是一个理论上的答案,因为 Java 8 要到明年第一季度才会正式发布。

于 2013-08-05T12:10:56.597 回答
3

目前,除了简单的旧for循环之外,没有其他语言功能。

在 Java 8 中,可能有 lambda 表达式,也许还有一些辅助方法可以满足Collection您的需求。但是 Java 8 还没有发布。

于 2013-08-05T12:04:53.360 回答
1

不,据我所知,在 Java 中,除了使用循环之外,没有办法在数组的每个元素上调用方法。

于 2013-08-05T12:04:48.847 回答
1
int[] field1 = new int[myClassArray.size()];
for(int i = 0; i < myClassArray.size(); i++){
    field1[i] = myClassArray[i].getField1();
}

您的方法必须使用循环(while,here for),因为没有循环就无法遍历数组。当然,您可以一个一个地处理数组的每个元素。但这对于数组中相当大小的元素来说将是一场噩梦。

于 2013-08-05T12:06:54.547 回答