Ordenar una lista de matrices según el valor de los objetos en otra lista de matrices en Java

SNDVLL:

Tengo un problema al ordenar una lista de matrices. En una clase tengo dos Array Lists de diferentes objetos, podemos llamar a los objetos Foo y Bar.

public class Foo() {
   int value;
   //Some other fields, and setters and getters.
}

public class Bar() {
   int id;
   //Same here...
}

Entonces, la lista fooList puede estar totalmente revuelta. Digamos que tengo 16 Foos, pero Foo con valor 5 puede estar en el índice 13 y así sucesivamente.

Lo que estoy tratando de hacer es ordenar barList para que coincida con fooList después de estos valores. Si Foo con valor 5 está en el índice 13, quiero que Bar con valor 5 esté en el índice 13. Mi último intento fue este, pero sin éxito.

HashMap<Integer, Integer> positions = new HashMap<>();
for(int i=0;i<fooList.size();i++){
    positions.put(foo.get(i).getValue, i);
}
Collections.sort(barList, new Comparator<Bar>(){
    public int compare(Bar obj1, Bar obj2){
        return positions.get(barList.indexOf(obj1)) -
 positions.get(barList.indexOf(obj2));
    }
});

¿Alguien tiene idea de cómo hacer esto de una manera eficiente?

usuario7:

No estoy seguro de por qué está utilizando el índice de un elemento barListpara buscar en el mapa positions.

Esto debería ayudarte

Collections.sort(barList, new Comparator<Bar>() {
    @Override
    public int compare(Bar o1, Bar o2) {
        return positions.get(o1.getId()) - positions.get(o2.getId());
    }
});

Esto se puede simplificar con una sola línea.

Collections.sort(barList, Comparator.comparingInt(bar -> positions.get(bar.getId())));

Básicamente, el problema se reduce a esto:

Dadas dos listas de números enteros A = {a 1 , a 2 ... a n } y B = {b 1 , b 2 , ... b m }, ordena la lista B según la posición de ocurrencia del elemento en la primera lista, A.

Para dos elementos x , y en B

  • x> y , si x aparece antes de y en A.
  • x <y , si x aparece después de y en A.
  • x = y , si x = y

Entonces, la función de comparación para Bartiene que comparar la posición en la que ha aparecido un elemento en particular Foo(según lo anterior).

NOTA: Esto supone (como ha dicho) que no hay ningún elemento en Barque no esté allí Foo. (Los elementos de Barson un subconjunto de los elementos de Foo).

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Eliminar todos los objetos de una lista de matrices que existen en otra lista de matrices

Agregar una matriz de objetos a la lista de matrices y comparar con otra lista de matrices en función de un valor de propiedad y filtrar el resultado

Ordenar una lista según el índice de los elementos en otra lista

averiguar los elementos de una lista de matrices que no está presente en otra lista de matrices

Java Busca en una lista de matrices de cadenas de palabras que están en otra lista de matrices

Agrupar y ordenar una lista de matrices en java

Agrupar y ordenar una lista de matrices en java

¿Cuál es la mejor manera de encontrar el valor promedio de los objetos almacenados en una lista de matrices?

Cómo ordenar matrices numpy de una lista en función de los promedios de columnas

Cómo asignar y almacenar el valor del elemento de una lista de matrices a otra en Java

JAVA: ¿Cómo fusiono objetos de una lista de matrices en función de un valor de propiedad?

cómo hacer una lista de matrices para cada valor en otra lista de matrices en Android Studio

Ordene la lista de matrices de Kotlin según los valores de otra lista de matrices

ordenar en una matriz de lista de matrices

obtener el valor de una lista de matrices de objetos que tiene un atributo de otra lista de matrices de objetos

Cómo ordenar una lista de matrices de objetos en orden ascendente

Eliminar elementos en una lista de matrices que existen en otra lista de matrices

Divida una matriz de objetos en matrices separadas según el valor de la propiedad

Ordenar lista de matrices en orden aleatorio

Ordenar una lista de objetos en función de otra lista corta de python

Ordenar lista de matrices de cadenas en Java

copiar una lista de matrices a otra lista de matrices en kotlin

ordenar lista de objetos por dimensión de matrices envuelto en objeto

Lista de matrices en Java

Java lee un archivo en una lista de matrices de objetos y devuelve esa lista de matrices

Dividir una gran variedad de matrices multidimensionales en función de los índices almacenados en otra matriz o lista

ordenar la vista de lista por existencia en otra lista de matrices

ordenar la vista de lista por existencia en otra lista de matrices

Ordenar el conjunto de consultas de django según los pedidos en una lista

TOP Lista

CalienteEtiquetas

Archivo