2017-05-06 60 views
0

說我有對象的列表(比如List<User>),像的Java:轉換對象的列表框中設定地圖的

[ 
    { 
     "name": "myName", 
     "age": 1, 
     "someField": "foo" 
    }, 
    { 
     "name": "otherName", 
     "age": 2, 
     "someField": "bar" 
    }, 
] 

我想將其轉換爲Set<Map<String, Integer>>這樣,我得到了一組name => age對。所以最終結果應該是[{"myName": 1},{"otherName": 2}]

如何使用流和收集器來做到這一點?

+3

好奇,爲什麼一個'設置<地圖<字符串,整數>>',而不僅僅是'地圖<字符串,整數>? –

+0

@KevinAnderson也許可能有重複的名字。 – shmosel

回答

0

您可以使用下面的代碼段用於解析JSON字符串,然後做一些操作與:使用

public static void main(String[] args) {   
    String str = "[  {   \"name\": \"myName\",   \"age\": 1,   \"someField\": \"foo\"  },  {   \"name\": \"otherName\",   \"age\": 2,   \"someField\": \"bar\"  }, ]"; 
    JSONArray jsonobj = new JSONArray(str); 
    Map<String,Integer> map = new HashMap<>(); 
    for(int i = 0;i<jsonobj.length();i++){ 
     JSONObject obj = jsonobj.getJSONObject(i); 
     map.put(obj.getString("name"), obj.getInt("age")); 
    } 
    Set<Map<String,Integer>> set = new HashSet<>(); 
    set.add(map); 
    System.out.println(set); 
} 

庫:org.json

-1

這裏是一個可以轉換爲Map<String, Integer>與重複處理:

final List<User> users = new ArrayList<>(); 
users.add(new User("name 1", 25)); 
users.add(new User("name 1", 49)); 
users.add(new User("name 2", 67)); 

final Map<String, Integer> nameToAge = users.stream().collect(
       Collectors.toMap(
         user -> user.name, 
         user -> user.age, 
         (user1, user2) -> { 
          System.out.println("Resolving duplicates..."); 
          return user1; 
         }) 
       ); 

在這種情況下,定義類型User是:

public class User { 
    public final String name; 
    public final int age; 

    public User(final String name, final int age) { 
     this.name = name; 
     this.age = age; 
    } 
} 
+0

不尋找'Map '尋找'Set > – Kousha

+0

@Kousha它需要一組映射,每個映射只有一對映射,這很奇怪......也許你'對一組元組(對)感興趣嗎?然而,最好使用某種類型的「Pair」對元組進行建模,而不是使用帶有單個元素的Map。請注意,只有一個'Map'的實例已經爲您提供了一個保證,不會有重複,我猜是使用'Set'的原因。 – 01es

0

我落得這樣做:

final List<User> users = new ArrayList<>(); 
users.add(user1); 
users.add(user2); 
users.add(user3); 


Set<Map<String, Integer>> usersSet = 
    users 
     .stream() 
     .map(u -> Collections.singletonMap(u.getName(), u.getAge())) 
     .collect(Collectors.toSet()); 
相關問題