Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可比非排序对象_Java_Android_Comparator_Comparable - Fatal编程技术网

Java 可比非排序对象

Java 可比非排序对象,java,android,comparator,comparable,Java,Android,Comparator,Comparable,我很难根据对象的属性来整理对象 我有一个病人对象列表,我想根据他们的姓氏进行排序,但它根本没有对他们进行排序。你能告诉我我做错了什么吗 下面是一些相关的代码 Patient.java import java.util.Comparator; public class Patient implements Comparable<Patient> { String fname, lname, mname, ID; public static class OrderBy

我很难根据对象的属性来整理对象

我有一个病人对象列表,我想根据他们的姓氏进行排序,但它根本没有对他们进行排序。你能告诉我我做错了什么吗

下面是一些相关的代码

Patient.java

import java.util.Comparator;

public class Patient implements Comparable<Patient> {
    String fname, lname, mname, ID;

    public static class OrderByLastName implements Comparator<Patient> {

        @Override
        public int compare(Patient p1, Patient p2) {
            return p1.lname.compareTo(p2.lname);
        }
    }

    public static class OrderByID implements Comparator<Patient> {

        @Override
        public int compare(Patient p1, Patient p2) {
            return p1.ID.compareTo(p2.ID);
        }
    }

    @Override
    public int compareTo(Patient another) {
        // TODO Auto-generated method stub
        return 0;
    }
}
public class PatientList extends ActionBarActivity {

String[] newFName = {"Mark","Andy","Bryan"};
String[] newLName = {"Uy","Igy","Nator"};
String[] newMName = {"Wi","Menos","Pat"};
String[] newID = {"3","5","1"};
ArrayList<Patient> patientList;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    createPatientList();
    sortPatient(1);

}

private void createPatientList() {
    patientList = new ArrayList<Patient>();
    for (int i = 0; i < newFName.length; i++) {
        Patient patient = new Patient();
        patient.lname = newLName[i];
        patient.fname = newFName[i];
        patient.mname = newMName[i];
        patient.ID = newID[i];
        patientList.add(patient);
    }
}

private void sortPatient(int order){
    switch (order) {
        case 1:
            Collections.sort(patientList, new Patient.OrderByLastName());
            break;
        case 2:
            Collections.sort(patientList, new Patient.OrderByID());
            break;
        default:
            break;
        }
}
}
import java.util.Comparator;
公共类病人{
字符串fname、lname、mname、ID;
公共静态类OrderByLastName实现了Comparator{
@凌驾
公共整数比较(患者p1、患者p2){
返回p1.lname.compareTo(p2.lname);
}
}
公共静态类OrderByID实现了Comparator{
@凌驾
公共整数比较(患者p1、患者p2){
返回p1.ID.compareTo(p2.ID);
}
}
@凌驾
公共int比较(患者与其他患者){
//TODO自动生成的方法存根
返回0;
}
}
MainActivity.java

import java.util.Comparator;

public class Patient implements Comparable<Patient> {
    String fname, lname, mname, ID;

    public static class OrderByLastName implements Comparator<Patient> {

        @Override
        public int compare(Patient p1, Patient p2) {
            return p1.lname.compareTo(p2.lname);
        }
    }

    public static class OrderByID implements Comparator<Patient> {

        @Override
        public int compare(Patient p1, Patient p2) {
            return p1.ID.compareTo(p2.ID);
        }
    }

    @Override
    public int compareTo(Patient another) {
        // TODO Auto-generated method stub
        return 0;
    }
}
public class PatientList extends ActionBarActivity {

String[] newFName = {"Mark","Andy","Bryan"};
String[] newLName = {"Uy","Igy","Nator"};
String[] newMName = {"Wi","Menos","Pat"};
String[] newID = {"3","5","1"};
ArrayList<Patient> patientList;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    createPatientList();
    sortPatient(1);

}

private void createPatientList() {
    patientList = new ArrayList<Patient>();
    for (int i = 0; i < newFName.length; i++) {
        Patient patient = new Patient();
        patient.lname = newLName[i];
        patient.fname = newFName[i];
        patient.mname = newMName[i];
        patient.ID = newID[i];
        patientList.add(patient);
    }
}

private void sortPatient(int order){
    switch (order) {
        case 1:
            Collections.sort(patientList, new Patient.OrderByLastName());
            break;
        case 2:
            Collections.sort(patientList, new Patient.OrderByID());
            break;
        default:
            break;
        }
}
}
公共类PatientList扩展了ActionBarActivity{
字符串[]newFName={“马克”、“安迪”、“布莱恩”};
字符串[]newLName={“Uy”、“Igy”、“Nator”};
字符串[]newMName={“Wi”、“Menos”、“Pat”};
字符串[]newID={“3”、“5”、“1”};
ArrayList患者列表;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
createPatientList();
sort患者(1);
}
私有void createPatientList(){
patientList=新的ArrayList();
for(int i=0;i
据我所知,您的代码应该可以工作,我怀疑单元测试可以证明这一点。如果您的问题是看不到更新,可能是视图更新逻辑有问题。

Philip,我刚刚复制了您的代码并将其粘贴到java项目中。下面是源代码以及输出的屏幕截图。我没有对Patient类进行任何更改;只是复制并粘贴到我的项目中

Test.java:

import java.util.ArrayList;
import java.util.Collections;

public class Test {

    static String[] newFName = { "Mark", "Andy", "Bryan" };
    static String[] newLName = { "Uy", "Igy", "Nator" };
    static String[] newMName = { "Wi", "Menos", "Pat" };
    static String[] newID = { "3", "5", "1" };
    static ArrayList<Patient> patientList;

    public static void main(String[] args) {

        createPatientList();

        System.out.println("Before: ");
        for (Patient p : patientList) {
            System.out.println(p.lname);
        }

        sortPatient(1);

        System.out.println("\nAfter: ");
        for (Patient p : patientList) {
            System.out.println(p.lname);
        }
    }

    private static void createPatientList() {
        patientList = new ArrayList<Patient>();
        for (int i = 0; i < newFName.length; i++) {
            Patient patient = new Patient();
            patient.lname = newLName[i];
            patient.fname = newFName[i];
            patient.mname = newMName[i];
            patient.ID = newID[i];
            patientList.add(patient);
        }
    }

    private static void sortPatient(int order) {
        switch (order) {
        case 1:
            Collections.sort(patientList, new Patient.OrderByLastName());
            break;
        case 2:
            Collections.sort(patientList, new Patient.OrderByID());
            break;
        default:
            break;
        }
    }
}
import java.util.ArrayList;
导入java.util.Collections;
公开课考试{
静态字符串[]newFName={“Mark”,“Andy”,“Bryan”};
静态字符串[]newLName={“Uy”、“Igy”、“Nator”};
静态字符串[]newMName={“Wi”、“Menos”、“Pat”};
静态字符串[]newID={“3”、“5”、“1”};
静态数组列表;
公共静态void main(字符串[]args){
createPatientList();
System.out.println(“之前:”);
for(患者p:患者列表){
System.out.println(p.lname);
}
sort患者(1);
System.out.println(“\n后面:”);
for(患者p:患者列表){
System.out.println(p.lname);
}
}
私有静态void createPatientList(){
patientList=新的ArrayList();
for(int i=0;i
屏幕截图:


@Vikalpatel使用比较器作为第二个参数的排序不应该只根据比较器工作吗?这是我对@ErikMadsen的理解:通过文档记录,很抱歉对完全不存在的可比和比较器的顺序产生误导。完全同意你的意见。@ErikMadsen你是对的。我在分类前后都执行了代码并打印了患者姓名,效果很好。@todd你是怎么做到的?你能给我看看你的源代码吗?是这样吗。您建议我如何纠正此问题?有可能将更新传递给新对象吗?我终于能够让它工作了。问题似乎是我是个白痴。在排序之前,我显示了初始列表。这就是为什么新的排序列表不能正确显示的原因。谢谢你的帮助。我已经解决了这个问题。请查看我对@Erik answer的评论。无论如何,谢谢你的帮助。:)