Cómo encontrar el valor máximo de una Arraylist y dos de su posición de índice usando Java

¿Cómo puedo encontrar el valor máximo de un Arraylist con sus posiciones en el índice?

ArrayList ar = new ArrayList();
ar.add(2); // position 0
ar.add(4); // position 1
ar.add(12); // position 2
ar.add(10); // position 3
ar.add(12); // position 4

String obj = Collections.max(ar);
int index = ar.indexOf(obj);

System.out.println("obj max value is " + obj + " and index position is " + index);

El programa anterior simplemente devuelve la salida como el primer objeto máximo con valor 12 y posición del índice 2.

Pero mi salida real debería ser posiciones de índice 2 y 4 (porque el valor máximo 12 está presente en dos posiciones de índice).

preguntado el 03 de mayo de 12 a las 19:05

¿Qué has intentado hasta ahora? Por favor, lea el Preguntas Frecuentes y Cómo preguntar. Además, ha realizado 13 preguntas y ha aceptado CERO respuestas. Vuelva atrás y acepte algunas respuestas. -

¿Por qué no usa simplemente un for bucle para iterar a través de la lista usando .get(i) para obtener cada elemento de la lista. -

5 Respuestas

Puede usar el Colecciones para encontrar el valor máximo de una lista y luego usar la propiedad índice de para encontrar su posición en su lista.

List<Integer> myList = new ArrayList<Integer>();
myList.add(3); // adding some values
myList.add(5);
myList.add(7);
myList.add(3);
myList.add(1);

Integer maxVal = Collections.max(myList); // should return 7
Integer maxIdx = myList.indexOf(maxVal); // should return 2 (position of the value 7)

Respondido 26 Oct 18, 15:10

Desde Java 8, esto podría hacerse mediante:

int index = IntStream.range(0, ar.size()).boxed()
        .max(Comparator.comparing(ar::get)).orElse(-1);

respondido 12 mar '19, 11:03

¡Esta es la mejor respuesta! ¿puedes explicar tu solución? - comojudo

@likejudo, la idea es sencilla: obtengo todos los índices de lo dado ArrayList (IntStream.range(0, ar.size())), luego encajonelos (obteniendo Stream<Integer) para poder usar el comparador y tomar un índice máximo comparándose no a sí mismos, sino obteniendo elementos del dado ArrayList a ellos. El resultado de max is Optional, de modo que en el caso de una entrada vacía, obtendré Optional.empty() resultado. En este caso, volveré. -1. - Timofey Gorshkov

No probado:

public static int maxIndex(List<Integer> list) {
  Integer i=0, maxIndex=-1, max=null;
  for (Integer x : list) {
    if ((x!=null) && ((max==null) || (x>max))) {
      max = x;
      maxIndex = i;
    }
    i++;
  }
  return maxIndex
}
// ...
maxIndex(Arrays.asList(1, 2, 3, 2, 1)); // => 2
maxIndex(Arrays.asList(null, null)); // => -1
maxIndex(new ArrayList<Integer>()); // => -1

contestado el 03 de mayo de 12 a las 20:05

Simplemente itere una vez a través de la lista, tenga otra lista para empujar el índice del número máximo

contestado el 03 de mayo de 12 a las 19:05

public static void main (String [] args) {

    List<Integer> ar=new ArrayList<Integer>();
    ar.add(2); `adding the values in the list`
    ar.add(5);
    ar.add(6);
    ar.add(4);
    ar.add(6);
    ar.add(5);
    ar.add(6);

    int max=Collections.max(ar);

    while(ar.contains(max))
    {
        int i=ar.indexOf(max); 
        System.out.println("the index of 6:"+ar.indexOf(max));
        ar.set(i, -1);
        System.out.println(ar);
    }       

}

contestado el 04 de mayo de 12 a las 09:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.