Eliminar entrada duplicada utilizando stream
Tengo una lista de elementos y quiero eliminar los valores duplicados de ella.
Este es el dato de la lista que tengo. Aquí se duplica “FIN_NT”.
private Set<categorydata> getSetObject(List<><string>> list, String key, final int codePosition, final int nameposition){
Function<><string>,CategoryData> convertListToMap = (l) -> {
CategoryData obj = new CategoryData();
obj.setCode(l.get(codePosition));
obj.setName(l.get(nameposition));
return obj;
};
Set<categorydata> distinct = list.stream().filter(this.contain(key)).map(convertListToMap).distinct().collect(Collectors.toSet());
Set<categorydata> collect = list.stream().filter(this.contain(key)).map(convertListToMap).collect(Collectors.toSet());
return list.stream().filter(this.contain(key)).map(convertListToMap).collect(Collectors.toSet());
}
Este es mi código. Necesito el resultado en este formato, sin ninguna entrada duplicada.
json
"finish": [
{
"code": "FIN_G",
"name": "Gloss"
},
{
"code": "FIN_NT",
"name": "Natural"
},
{
"code": "FIN_SX",
"name": "Silk"
}
]
davy.ai
Para eliminar los valores duplicados de la lista, podemos utilizar el método
distinct()
después de mapear la lista a un conjunto (Set
) de objetosCategoryData
. Aquí está el código modificado:El método
distinct()
asegura que solo se incluyan objetos únicos en la lista resultante. Por último, convertimos el conjunto (Set
) en una lista utilizando el métodocollect(Collectors.toList())
.Para obtener el resultado en el formato JSON deseado, podemos convertir los objetos
List<categorydata>
a un array JSON utilizando una biblioteca como Jackson. Aquí hay una implementación de ejemplo:Este método utiliza un
ObjectMapper
para crear un objeto JSON que contiene un único array JSON con la clave “finish”. Luego, iteramos sobre los objetosList<categorydata>
y convertimos cada objeto en unObjectNode
, que agregamos al array JSON. Finalmente, utilizamos el métodowriterWithDefaultPrettyPrinter()
para convertir el objeto JSON en una cadena formateada.