【问题标题】:Java sorting with comparator [duplicate]使用比较器进行 Java 排序[重复]
【发布时间】:2014-10-21 22:04:32
【问题描述】:

好吧,我知道这个问题已经一次又一次地得到了回答,但是我真的不知道我做错了什么。

请帮忙。

我有两节课。 Machine.java 是对象类和包含主语句的 InventoryTest.java 类。

我读过的所有地方都说这应该有效。

这是在 Machine.java 类中

public static Comparator<Machine> machineIdNumberComparator = new Comparator<Machine>() {

    @Override
public int compare(Machine s1, Machine s2) {
   String MachineID1 = s1.getMachineIdNumber();
   String MachineID2 = s2.getMachineIdNumber();

   //ascending order
   return MachineID1.compareTo(MachineID2);
}};

这是在 InventoryTest 中

        Collections.sort(arraylist, inventoryArray.machineIdNumberComparator);

这条线出现了问题。 arraylist 有找不到符号错误,machineIdNumberComparator 也是如此。

我需要能够通过 3 种不同的方法进行排序。

编辑:这就是我添加和创建数组列表的方式

public List<Machine> inventoryArray = new ArrayList<>();

inventoryArray.add(new Machine(strMachineIdNumber, strManufacturer, strType, dblPowerOrCapacity, dblPrice));

arraylist 在您声明所有变量的公共类下方开始声明。

/**
*
* @author stephankranenfeld
*/
import java.awt.*;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Collections;
import java.util.Comparator;
import java.util.NoSuchElementException;
import java.util.Scanner;
import java.util.StringTokenizer;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.JButton;
import javax.swing.JTextArea;

public class InventoryTest extends JFrame {

private static final int FRAME_WIDTH = 800;
private static final int FRAME_HEIGHT = 1500;
private final JTextArea textArea;
private final JButton addMachine;
private final JButton removeMachine;
private final JButton exitButton;
private final JButton sortButton;
final String START_TEXT = String.format("%-20s %-20s %-10s %15s %10s %n", "Machine ID Number:", "Manufacturer:", "Type:", "Power/Capacity:", "Price:"); // starting line of texted used in both display all and entre data buttons.
final String DEVIDER = "-------------------------------------------------------------------------------------\n";// a devider used multple times
public List<Machine> inventoryArray = new ArrayList<>();

 /*
junk that isn't needed i think
*/

private void sort() {
    JComboBox sortBy = new JComboBox();
    sortBy.addItem("ID Number");
    sortBy.addItem("Manufacturer");
    sortBy.addItem("Type");

    int option = JOptionPane.showConfirmDialog(null, sortBy, "Sort by?", JOptionPane.OK_CANCEL_OPTION);
    if (option == JOptionPane.OK_OPTION) 
    {
        //if id is selected sort by id
        //if manufacturer is selected sor by manufacturer
        //if type is selected sort by type
        Collections.sort(inventoryArray, Machine.machineIdNumberComparator);
    }
}
}


 public class Machine{
/*
* all the get and set methods
*/
    public static Comparator<Machine> machineIdNumberComparator = new Comparator<Machine>() {

    @Override
public int compare(Machine s1, Machine s2) {
   String MachineID1 = s1.getMachineIdNumber();
   String MachineID2 = s2.getMachineIdNumber();

   //ascending order
   return MachineID1.compareTo(MachineID2);
}};

【问题讨论】:

  • 请展示一个简短但完整的程序来说明问题,并给出complete错误信息。不仅仅是“arraylist 找不到符号错误,machineIdNumberComparator 也是如此” - 哪个符号?为什么你试图将比较器称为inventoryArray.machineIdNumberComparator,当它在一个我希望被称为Machine的类中? (我希望Machine.machineIdNumberComparator。)我强烈怀疑这个问题与排序无关,与你有关的一切只是没有正确引用变量。
  • 能否附上所有的源代码。
  • 无论如何谢谢大家。正如 Jon Skeet 所说,我错了,现在改了,它可以工作 @JonSkeet,谢谢!

标签: java sorting arraylist


【解决方案1】:

Collections.sort() 的第二个参数应该是Machine.machineIdNumberComparator

【讨论】:

  • 这应该是评论。
  • 对不起,由于声誉低,我无法发表评论
  • @eldest 没关系,但正如 mohaned 所说,这是一条评论。尝试回答一些问题以便能够发表评论。
  • 我已经在努力了 :)
  • @eldest 谢谢老兄!有人打败了你,但确实有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-14
  • 1970-01-01
  • 2022-01-20
  • 2016-11-08
相关资源
最近更新 更多