Tengo como

List<JSONObject> jsonObjectList =[
      {id: "aaa",key2: "bbb",key3="eee"},
      {id: "aaa",key2: "bbb",key3="fff"},
      {id: "aab",key2: "ccc",key3="eee"}
    ]

Necesito el valor único de jsonObjectList comparando por valor de identificación en java.

Lo intenté

 List<JSONObject> distinctElements = jsonObjectList.stream()
                                .filter( distinctByKey(p -> p.getId()) )
                                .collect( Collectors.toList() );

Quiero el siguiente resultado para el ejemplo anterior:

distinctElements =[
  {id: "aaa",key2: "bbb",key3="fff"},
  {id: "aab",key2: "ccc",key3="eee"}
]
-1
Ismail Hossain 6 ago. 2020 a las 17:34

2 respuestas

La mejor respuesta

Algo así como:

List<JSONObject> distinctElements = jsonObjectList.stream()
    .collect(Collectors.groupingBy(JSONObject::getId, Collectors.toList()))
    .values().stream()
    .map(list -> list.get(0))
    .collect(Collectors.toList());

También puede crear una instancia de una implementación de Set<> que le permite especificar un keyExtractor personalizado.

0
Marco Mele 6 ago. 2020 a las 15:47

Puede intentar utilizar Set ya que evita la duplicación de objetos. Y use la misma biblioteca para la serialización JSON, como Gson, por ejemplo.

0
giovanibr 6 ago. 2020 a las 15:13