我想根据对象属性对ArrayList中的一些对象进行排序。 对象有:
public class Minterm
{
String minTerm;
char flagTick;
String minTermDerive;
int groupNo;
String adjGroup;
static int MaxLiterals;
然后我在主要方法中有这个:
ArrayList<Minterm> column =new ArrayList<Minterm>();
然后我在列表中添加了Minterm
类型的一些对象。但最后我想组织它们并在成员变量groupNo
(升序)上对它们进行排序。
我搜索并提出了我尝试过但没有成功的可比较和比较器接口。有没有其他方法可以做到这一点?或者我正在做比较器实现错误。
编辑: 以下是我为Comparator编写的代码。请确认它是否会按升序排序?
package backEnd;
import java.util.Comparator;
public class Comp implements Comparator<Minterm>
{
@Override
public int compare(Minterm a, Minterm b)
{
return a.getgroupOne().compareTo(b.getgroupOne());
}
}
我将其视为:
Collections.sort(column , new Comp());
似乎工作正常。但我对它没有完全理解。 请确认它是否会按升序排序?
答案 0 :(得分:6)
您应该Minterm
实施Comparable<MinTerm>
或为Comparator
撰写自定义MinTerm
,然后使用Collections.sort
。
使用比较器,它看起来像这样:
Collections.sort(column, new Comparator<Minterm>() {
@Override
public int compare(Minterm o1, Minterm o2) {
return Integer.valueOf(o1.groupNo).compareTo(o2.groupNo);
}
});
关于您的修改:
是。根据升序顺序中的组对Minterm
进行排序。
答案 1 :(得分:3)
Collections.sort()
和Comparator
界面正是这项工作的正确工具。
以下几行应该做(未经测试):
Collections.sort(column, new Comparator<Minterm>() {
public int compare(Minterm o1, Minterm o2) {
return Integer.valueOf(o1.groupNo).compareTo(o2.groupNo);
}
});
答案 2 :(得分:2)
两种方式,使用Collections.sort(..)
:
Comparable
。涉及更改原始类,这可能是不可能的Comparator
。它需要您的对象的实例并进行比较。不需要改变课程。无论哪种方式,请确保符合接口的合同。
答案 3 :(得分:0)
以下是示例代码(有关更多示例,请参阅http://java2novice.com/java-collections-and-util/arraylist/sort-comparator/):
public class MyArrayListSort {
public static void main(String a[]){
List<Empl> list = new ArrayList<Empl>();
list.add(new Empl("Ram",3000));
list.add(new Empl("John",6000));
list.add(new Empl("Crish",2000));
list.add(new Empl("Tom",2400));
Collections.sort(list,new MySalaryComp());
System.out.println("Sorted list entries: ");
for(Empl e:list){
System.out.println(e);
}
}
}
class MySalaryComp implements Comparator<Empl> {
@Override
public int compare(Empl e1, Empl e2) {
if(e1.getSalary() < e2.getSalary()){
return 1;
} else {
return -1;
}
}
}
class Empl{
private String name;
private int salary;
public Empl(String n, int s){
this.name = n;
this.salary = s;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public String toString(){
return "Name: "+this.name+"-- Salary: "+this.salary;
}
}