[英]ArrayList get all values for an object property
可以说我有一个对象User的ArrayList,所以ArrayList<user>
。 用户对象具有属性userID
。
而不是我自己遍历列表并将用户ID添加到单独的列表中,而是在API调用中,我可以在该对象上传递我想要的该对象的属性,并向我返回这些属性的列表? 通过API进行了浏览,没有发现任何异常。
寻找Java 7或<中的解决方案。
您可以使用lambdas表达式 (Java 8)来做到这一点:
import java.util.*;
import java.util.function.*;
import java.util.stream.*;
public class Test {
public static void main(String args[]){
List<User> users = Arrays.asList(new User(1,"Alice"), new User(2,"Bob"), new User(3,"Charlie"), new User(4,"Dave"));
List<Long> listUsersId = users.stream()
.map(u -> u.id)
.collect(Collectors.toList());
System.out.println(listUsersId);
}
}
class User {
public long id;
public String name;
public User(long id, String name){
this.id = id;
this.name = name;
}
}
输出:
[1, 2, 3, 4]
片段在这里 。
[1, 2, 3, 4]
输出:
[1, 2, 3, 4]
您可以使用Guava的Collections2#transform方法获得相同的结果。
List<Integer> userIDs = Collections2.transform(users, new Function<User, Integer> (){
public Integer apply(User user) {
return user.getUserID();
}
});
Guava支持Java 7及更低版本,因此,如果您要使用外部库,则上面的方法适用于您的情况。
不幸的是,您将必须对可能具有的其他任何对象及其内部字段执行类似的逻辑。 它不像反射解决方案那样通用,而是更紧凑的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.