2015-10-18 3 views
-1

У меня есть два списка, скажем, L1 и L2 с данными, как показано ниже:список сортировки по сравнению с другими списка в Java

L1: 
    {a, def2, a1; 
    a, ert4, a2; 
    i, ert4, a7; 
    i, ght6, a8; 
    a, def2, a3; 
    o, ght6, a2; 
    i, htf, a8; 
    } 

    L2: 
    { 
     a1, 7; 
     a2, 9; 
     a3, 14; 
     a4, 12; 
     a5, 18; 
     a6, 2; 
     a7, 6; 
     a8, 15 
     } 

Я хочу, чтобы отсортировать список L1 в соответствии с значениями a1, a2 в списке l2 в порядке убывания. Выход я хочу быть как:

{a, def2, a3; 
a, ert4, a2; 
a, def2, a1; 
i, ert4, a8; 
i, htf, a8; 
i, ght6, a7; 
o, ght6, a2 
} 

Я знаю, что мы можем использовать компаратор для пользовательского заказа, но я не знаю, как использовать его для другого списка. Пожалуйста, скажите мне, как я могу это сделать. Благодаря

+0

Почему вам нужны два списка? почему бы не обернуть данные в класс и иметь только один список этого класса? – Bon

+0

L1 - вход для метода. Вход, который я читаю из плоского файла, в список, который является L1. Я хочу упорядочить данные в соответствии с значениями a1, a2, ... в порядке убывания. – ssaini

ответ

0

во-первых, L2 может быть реализован с использованием карты

HashMap<String, Integer> l2 

, то вы можете определить класс для элемента L1

class Element implements Comparable<Element>{ 
    String value, label; // label is a1,a2,a3....; value is whatever other data you want to store 
     int sequence;// used for sorting 
     public int compareTo(Element o)   { 
    return this.sequence- o.sequence; 
} 
} 

Учитывая, что при чтении элементов L1, просто do

Element element = new Element(); 
element.value = "def2"; 
element.label="a1"; 
element.sequence = L2.getValue(element.label); 

List L1 = new LinkedList(); 
L1.add(element); 

Предполагая, что L1 также является коллекцией, такой как список , вы сортируете по

Collections.sort(L1); 

это достигнет вашего заказа.

+0

Не могли бы вы уточнить ниже шаги далее: Учитывая, что когда вы читаете элементы L1, просто делайте element.sequence = L2.getValue (element.label); Предполагая, что L1 также является коллекцией, такой как список, вы сортируете по Collections.sort (L1); – ssaini

+0

Спасибо, сработало. – ssaini

Смежные вопросы