You can do this using lambdas expressions (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; } }
Output :
[1, 2, 3, 4]
Snippet here.
Ugliest solution using reflection :
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; } }
Output :
[1, 2, 3, 4]