代码之家  ›  专栏  ›  技术社区  ›  Dantes

如何使用CompareTo()和TreeSet()

  •  0
  • Dantes  · 技术社区  · 7 年前

    我有两个文件,行如下:ProductName(String);产品代码(字符串);SellData(Int)。

    class Gyumi implements Comparable<Gyumi> {
       String termek = "";
       String termekkod = "";
       int[] evek = new int[3];
    
      @Override
      public String toString() {
          return termek + ", " + termekkod + ", " + Arrays.toString(evek);
      }
    
      @Override
      public int compareTo(Gyumi t) {
          if(termekkod >((Gyumi)t.termekkod){
              return 1;
          }
          if(termekkod <((Gyumi)t.termekkod){
            return -1;
          }
            return 0;
        }
     }
    }
    
    public class Gyumolcs {
    
    static ArrayList<Gyumi> lista = new ArrayList<Gyumi>();
    static ArrayList<Gyumi> lista2 = new ArrayList<Gyumi>();
    static TreeSet<Gyumi> halmaz = new TreeSet<Gyumi>();
    
    public static void Feltolt() {
        File r = new File("termekkod_uzlet2.csv");
        File f = new File("termekkod_uzlet1.csv");
        try {
            Scanner scan = new Scanner(f, "iso-8859-2");
            while (scan.hasNextLine()) {
                String sor = scan.nextLine();
                String[] tomb = sor.split(";");
                Gyumi gy = new Gyumi();
                gy.termek = tomb[0];
                gy.termekkod = tomb[1];
                gy.evek[0] = Integer.parseInt(tomb[2]);
                gy.evek[1] = Integer.parseInt(tomb[3]);
                gy.evek[2] = Integer.parseInt(tomb[4]);
                lista.add(gy);
                halmaz.add(gy);
            }
        } catch (Exception e) {
            System.out.println("Hiba " + e.getMessage());
        }
        try {
            Scanner scan2 = new Scanner(r, "iso-8859-2");
            while (scan2.hasNextLine()) {
                String sor = scan2.nextLine();
                String[] tomb = sor.split(";");
                Gyumi gy = new Gyumi();
                gy.termek = tomb[0];
                gy.termekkod = tomb[1];
                gy.evek[0] = Integer.parseInt(tomb[2]);
                gy.evek[1] = Integer.parseInt(tomb[3]);
                gy.evek[2] = Integer.parseInt(tomb[4]);
                lista2.add(gy);
                halmaz.add(gy);
            }
        } catch (Exception e) {
            System.out.println("valami" + e.getMessage());
        }
    }
    
    public static void main(String[] args) {
        Feltolt();
        System.out.println(halmaz);
      }
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Rahul Raj    7 年前

    你的 方法错误,请将其更改为:

      @Override
      public int compareTo(Gyumi t) {
         if(termekkod.compareTo(t.termekkod)>0){
             return 1;
         }
         if(termekkod.compareTo(t.termekkod)<0){
             return -1;
         }
             return 0;
       }
    

    另外,请在代码中遵循通用的面向对象设计。为成员变量提供私有范围,并使用getter/setter检索/设置它们。

    对于OO设计来说,这看起来更简洁、更精确:

    @Override
    public int compareTo(Gyumi t) {
       if(termekkod.compareTo(t.gettermekkod())>0){
           return 1;
       }
       if(termekkod.compareTo(t.gettermekkod())<0){
           return -1;
       }
           return 0;
     }