繁体   English   中英

ArrayList获取对象属性的所有值

[英]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及更低版本,因此,如果您要使用外部库,则上面的方法适用于您的情况。

不幸的是,您将必须对可能具有的其他任何对象及其内部字段执行类似的逻辑。 它不像反射解决方案那样通用,而是更紧凑的解决方案。

听起来您想使用Map

地图使用Key, Value对。 您可以将userID分配为键,而将实际user对象分配为值。

你可以在这里阅读更多

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM