使用整数的排序ArrayList对字符串的ArrayList进行排序

时间:2015-08-17 09:36:28

标签: java sorting arraylist

我有两个ArrayLists。一个具有整数值,另一个列表具有字符串。我必须在比较器接口中使用自定义排序来对整数ArrayList进行排序,以便字符串ArrayList根据它进行排序。如何更改以下代码以使用Comparator查找解决方案。

import java.util.*;

class ListTask
{
  public static void main(String[] args) 
  {
    List<String> l2 = new ArrayList();
    List<Integer> l1 = new ArrayList();
    Scanner in = new Scanner(System.in);
    boolean err = false;
    int n;
    do
    {
      try
      {
        System.out.println("Please enter the number of values to be entered");
        //to find the length of 2 lists l1 and l2
        n= in.nextInt();
        //add values to l1
        System.out.println("Please enter the id ");
        for(int i=0;i<n;i++)
        {
          l1.add(in.nextInt());
          //to add values to l2
          System.out.println("Please enter the name");
          for(int i=0;i<n;i++)
          {
            l2.add(in.next());
            err = false;
          }
        }
      } catch(Exception e) {
        System.out.println("Please enter a valid input");
      }
    } while(err);

    //code to sort list l2 based on the list l1
    for(int i=0;i<l1.size();i++)
    {
      for(int j=i+1;j<l1.size();j++)
      {
        if((l1.get(i)) > (l1.get(j)))
        {
          Collections.swap(l1, i, j);
          Collections.swap(l2, i, j);
        }
      }
    }
    //displays the sorted values
    display(l1, l2);
  }

  public static void display(List l1, List l2)
  {
    System.out.println("The sorted List is");
    for(int i=0;i<l1.size();i++)
    {
      System.out.println("Id= "+ l1.get(i) + " Name= " + l2.get(i));
    }
  } 
}

提前致谢。

3 个答案:

答案 0 :(得分:2)

您需要:

  1. 创建一个包含2个字段的自定义对象:IdName。我们称这个对象为User
  2. List<String>List<Integer>替换为List<User>
  3. 当用户输入数据时,不是添加到两个列表,而是构造新的User对象并将其添加到步骤2中创建的列表中。
  4. User类实现Comparable接口。 (implements Comparable<User>)。
  5. compareTo方法覆盖中,将当前对象的Id与您提供的对象进行比较。
  6. 致电List<User>上的Collections.sort

答案 1 :(得分:0)

使用TreeMap<Integer, String>会不会更容易?当您添加到地图时,它将自动按键排序。

答案 2 :(得分:0)

您可以使用以下代码:

List<Pair<Integer, String>> l1l2 = new ArrayList<>();
    for (int i = 0; i < l1.size(); i++) { // I asume that l2 has the same length as l1
        l1l2.add(new Pair<>(l1.get(i), l2.get(i)));
    }
    Collections.sort(l1l2, Comparator.comparing(Pair::getKey));

您可以创建自己的有2个字段的类,而不是Pair

打印出已排序的列表更改显示方法:

public static void display(List<Pair<Integer, String>> l1l2) {

    System.out.println("The sorted List is");
    for (int i = 0; i < l1l2.size(); i++)
        System.out.println("Id= " + l1l2.get(i).getKey() + " Name= " + l1l2.get(i).getValue());

}

你必须考虑:

  • 你真的需要输入两个分区的输入(首先是所有ID而不是名字吗?...为什么不是ID,名称,ID,名称等等。在这种情况下你不需要2个名单)
  • 如果有2个具有相同ID的项目会发生什么?