假设我有一个User对象的ArrayList ArrayList
.User对象具有属性userID
.
是不是自己迭代列表并将userID添加到单独的列表中,是否有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]
这里的代码片段.
public class Test { public static void main (String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{ List<User> users = Arrays.asList(new User(1,"Alice"), new User(2,"Bob"), new User(3,"Charlie"), new User(4,"Dave")); List<Object> list = get(users,"id"); System.out.println(list); } public static List<Object> get(List<User> l, String fieldName) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{ Field field = User.class.getDeclaredField(fieldName); field.setAccessible(true); List<Object> list = new ArrayList<>(); for(User u : l){ list.add(field.get(u)); } field.setAccessible(false); return list; } } class User { private long id; private String name; public User(long id, String name){ this.id = id; this.name = name; } }
输出:
[1, 2, 3, 4]