당신이 사용 lambdas expressions (자바 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]
발췌문 here.
추한 솔루션을 사용하여 반사 :
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]
사실, 잭슨을 사용하여 json에서 객체를 매핑하는 경우에만 문제가 발생하므로 코드를 조금 더 단순하게 유지하려고합니다. – Michael
해시지도보다 간단합니까? 나는 그 때 당신이 무엇을 기대하고 있는지 정말로 확신하지 못한다. 그것은 구현하기가 쉽지 않습니다. – redFIVE
나는 그 요점을 놓치고 있다고 생각합니다. 잭슨은 아주 쉽게 목록을 파싱합니다. Map을 파싱하려면 코드에 복잡성이 추가됩니다. – Michael