es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Crear y encontrar el valor más alto en una sub-lista

Tengo un ArrayList de las Celdas de una hoja de Excel. Quiero crear subArrayLists de tamaño 50 del ArrayList de Celdas que tengo en realidad, comenzando desde el índice 1590 y terminando con size() - 700.

Quiero obtener el número más alto de cada subArrayList y ponerlo en el nuevo ArrayList. En el nuevo ArrayList sólo deben haber los valores más altos de cada subArrayList.

Los datos de entrada son mi ArrayList de Celdas.

Con este código obtengo más de 50 números y no siempre es el valor más alto. ¿Alguien tiene una idea?

Este es mi código:

“`
int partitionSize = 50;
List<><cell>> partitions = new ArrayList<>();
List<cell> high = new ArrayList();
Cell max = data.get(1590);

for (int i = 1590; i < data.size() – 700; i += partitionSize) {
partitions.add(data.subList(i, Math.min(i + partitionSize, data.size() – 700)));
}

for (List<cell> list: partitions) {
for (int i = 1; i < list.size(); i++) {
if (list.get(i).getNumericCellValue() > max.getNumericCellValue()) {
max = list.get(i);
}
high.add(max);
}
}
“`

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para resolver este problema, es necesario hacer algunos cambios en el código:

    1. Inicializar la variable max dentro del bucle que itera sobre cada sublista.
    2. Mover high.add(max) fuera del bucle que itera sobre cada sublista.
    3. Cambiar el operador de comparación por >= en la sentencia if.

    Aquí está el código revisado:

    int partitionSize = 50;
    
    List<><cell>> partitions = new ArrayList<>();
    List<cell> high = new ArrayList<>();
    
    for (int i = 1590; i < data.size() - 700; i += partitionSize) {
        List<cell> sublist = data.subList(i, Math.min(i + partitionSize, data.size() - 700));
        Cell max = sublist.get(0);
        for (Cell cell : sublist) {
            if (cell.getNumericCellValue() >= max.getNumericCellValue()) {
                max = cell;
            }
        }
        high.add(max);
    }
    

    Este código itera sobre cada sublista, encuentra el valor más alto y lo agrega al ArrayList high. Finalmente, devuelve una lista de valores máximos de cada sublista.

Comments are closed.