Obtener un objeto de una lista si un campo particular en el objeto coincide con cualquier valor de una lista separada.
Tengo una lista de cadenas como la que está debajo que contiene todos los números de tienda:
List<String> stores = new ArrayList<>;
Y una lista de objetos como esta:
List<UserStores> userStores = new ArrayList<>;
Ahora, la clase UserStores se parece a esto:
public class UserStores {
private String storeNo;
private String storeName;
private String country;
}
Quiero obtener todos los UserStores de esta lista <code>List & lt; UserStores & gt;</code>
si alguno de los storeNo está presente en la lista ‘stores’ dada anteriormente.
Por ejemplo,
stores = {1,2};
UserStores = [ {2, qwe, wqew}, {1,ABC, India}, {3, asd, USA} ];
resultado esperado = [{1,ABC, India}, {2, qwe, wqew}]; en el orden de las tiendas presentes en la lista 'stores',
¿Cómo puedo hacer esto usando stream/collectors?
Mi código actual es algo así … ¿se puede mejorar esto?
private static List<UserStores> getModifiedUserStoresList(
List<String> stores, List<UserStores> userStores
) {
List<UserStores> userStoreList = new ArrayList<>();
for(int i = 0; i < stores.size(); i++) {
for(int j = 0; j < userStores.size(); j++) {
if(userStores.get(j).getStoreNo().equals(stores.get(i))) {
userStoreList.add(userStores.get(j));
break;
}
}
}
return userStoreList;
}
davy.ai
Puede utilizar el stream y el filtro de Java para lograr el mismo resultado de una manera más concisa y legible. Aquí hay un ejemplo de código para lograr el resultado esperado:
Este código utiliza el método.
filter()
para filtrar solo los UserStores cuyo storeNo está en la lista de tiendas, luego el métodosorted()
para ordenar el resultado en función del orden de las tiendas en la lista de tiendas, y finalmente el métodocollect()
para recopilar el resultado como una ListEste código es más conciso y legible que el código original que proporcionó, y también utiliza todo el potencial de stream y collectors de Java.