我想知道是否存在一种从自定义类对象数组中提取属性数组的有效方法。例如,如果我有这样的内容:
i
在某个地方,我有一个ArrayList充满了此类的对象:
public class MyClass {
private Double p1;
private String p2;
private MyProperty p3;
public MyClass() {}
}
,我想获取其中一个属性的列表:
ArrayList<MyClass> listOfObjects = new ArrayList<>();
我所能想到的就是遍历ArrayList<MyProperty> listOfP3 = new ArrayList<>();
ArrayList<Double> listOfP1 = new ArrayList<>();
并将所需的属性一个一个地复制到一个新的数组中……还有更好的方法吗?
编辑: 如果可能的话,也可以使用Java 7
答案 0 :(得分:3)
可能最干净的方法是使用Streams。像这样:
List<String> listOfP2= listOfObjects.stream().map(x->x.getP2()).collect(Collectors.toList());
当然,在MyClass中,您需要为这些字段添加一个吸气剂。
答案 1 :(得分:0)
在Java 8和更高版本中,您可以使用stream
API(如@Amongalen所回答)。访问方法的可能性不同:您可以只写x -> x.getP1()
来代替MyClass::getP1
:
List<Double> p1List = myObjects.stream().map(MyClass::getP1).collect(Collectors.toList());
List<String> p2List = myObjects.stream().map(MyClass::getP2).collect(Collectors.toList());
List<MyProperty> p3List = myObjects.stream().map(MyClass::getP3).collect(Collectors.toList());