Digamos que tengo tres objetos que guardo en la base de datos y configuro la ID generada por la base de datos. No sé el orden de los objetos devueltos por el método saveToDb . Pero quiero hacer una prueba conjunta de que esos ID generados están ahí. ¿Cómo hago eso dentro de la corriente? Quiero hacer algo como esto:
List<MyObject> myObjects = getObjects(); numRecords = saveToDb(myObjects); // numRecords=3 List<Integer> intArray = Arrays.asList(1, 2, 3); intArray.stream() .forEach(it -> myObjects.stream() .filter(it2 -> it2.getId().equals(it)) .???? Pero no estoy seguro de dónde iría mi assertEquals() en una declaración como esta. ¿O mi enfoque es incorrecto? Sé que me vendría bien un bucle for simple, pero me gusta la elegancia de los flujos. Además, ¿hay alguna manera de crear dinámicamente el intArray, en caso de que tenga más de 3 myObjects?
Parece (si entendí correctamente), qué tal algo como esto:
boolean result = Arrays.asList(1, 2, 3).stream() .allMatch(i -> objects .stream() .map(MyObject::getId) .filter(j -> j == i).findAny().isPresent()); Assert.assertTrue(result);Entonces, ¿básicamente desea verificar si a una instancia de MyObject se le asignó una ID? ¿Tiene alguna importancia la igualdad con los ID en la matriz?
Que no:
List<MyObject> objects = getObjects(); saveToDb(objects); objects.stream().map(MyObject::getId).forEach(Assert::assertNotNull);Suponiendo que haya un método "getId" en MyObject, por supuesto.
Solo un pequeño complemento para su pregunta adicional:
Además, ¿hay alguna manera de crear dinámicamente el intArray, en caso de que tenga más de 3 myObjects?
Sí, puede usar IntStream para crear una transmisión basada en el tamaño de sus objetos como:
IntStream.rangeClosed(1, objects.size()) // both start and end inclusive y también hay un método IntStream.range(int start, int end) cuyo end es exclusivo.