Tengo dos listas:
def listA = ['2', '3', '4.5', '5', '6.5', '7', '7.5', '8'] def listB = ['10', '11', '13', '1', '2', '2.5']Quiero validar la secuencia de ambas listas. Para listA, cada elemento actual es más pequeño que el siguiente, así que tengo el siguiente ciclo para eso.
double previous = 0.0 for (int i = 0; i < listA.size(); i++) { double current = Double.parseDouble(listA.get(i)) if (previous >= current) { KeywordUtil.markFailed("previous=${previous}, current=${current} not in order") } previous = current }El código anterior funciona correctamente para listA.
Pero estoy atascado en cómo validar la segunda lista. El requisito es que del 10 al 13.5 los elementos deben estar en secuencia, pero después del 13.5, '1' debe estar ahí.
La lista B es dinámica. A veces sería ['11.5', '2', '3'] y otras veces ['12', '2'] o cualquier otra combinación. Cualquiera que sea la lista, siempre debe seguir la secuencia de 10-13.5 and then 1-3
Actualización , trataría de explicar el requisito un poco mejor. Básicamente, estoy probando la secuencia de tamaños de un producto que se muestra en la imagen.
Así que estoy probando diferentes sitios y se prueban diferentes productos. Cada producto tendría diferente disponibilidad de tamaño. La mayoría de los productos tendrían los tamaños en secuencia numérica, como el tamaño actual sería más pequeño que el siguiente. Para ellos, el bucle for anterior funcionaría.
Pero para ciertas categorías como 'Niños pequeños', el requisito es que los tamaños deben estar en el orden --> 10, 10.5, 11, 11.5, 12, 12.5, 13, 13.5, 1, 1.5, 2, 2.5, 3 . Es posible que a algunos de estos productos les falten ciertos tamaños, pero independientemente de los tamaños disponibles, deben seguir el orden anterior. Por ejemplo, si hay disponibles 12 y 2 tamaños, entonces debe estar en ese orden, no 2 y 12. De manera similar, si hay disponibles 13, 1 y 3 tamaños, debe estar en ese orden, y no 1, 3, 13
No estoy seguro de haber entendido sus requisitos (especialmente sobre listB ) correctamente, pero implementaría ambas comprobaciones mediante la clasificación de esta manera:
toSorted() que crea una nueva lista basada en un Comparator que se expresa como Closure {} . El comparador compara los valores convertidos al doble. La lista ordenada se compara con la original, y si se reordenó -> la lista no cumple con las reglas: boolean checkA( list ){ list == list.toSorted{ it.toDouble() } } assert checkA( [ '2', '3', '4.5', '5', '6.5', '7', '7.5', '8' ] ) assert !checkA( [ '2', 1, '3', '4.5', '5', '6.5', '7', '7.5', '8' ] )WEIGHTS y, por lo tanto, ordena la lista original por WEIGHTS . def WEIGHTS = [ 10, 10.5, 11, 11.5, 12, 12.5, 13, 13.5, 1, 1.5, 2, 2.5, 3 ]*.toDouble().asImmutable() def checkB = { list -> list == list.toSorted{ WEIGHTS.indexOf it.toDouble() } } assert checkB( ['10', '11', '13', '1', '2', '2.5'] ) assert checkB( ['11.5', '2', '3'] ) assert checkB( ['12', '2'] ) assert !checkB( ['11', '10', '1', '13', '2', '2.5'] ) assert !checkB( ['1', '12', '3'] )