gpt4 book ai didi

java - java中用于对对象数组进行排序的比较函数?

转载 作者:行者123 更新时间:2023-12-02 07:01:37 25 4
gpt4 key购买 nike

我有一个电话簿元素数组,我正在尝试使用可比排序根据字典顺序对它们进行排序。但这一切都搞砸了。请帮忙。提前致谢

这也有助于描述一下java中的排序函数!这是代码:

package myphonebook;

import javax.swing.*;
import java.util.Arrays;
import java.util.Comparator;
public class MyPhoneBook implements Comparator<MyPhoneBook>{

private String name,email,number;
MyPhoneBook()
{
}

public void input()
{
name = (JOptionPane.showInputDialog("Enter Name:\n")).toString();
number = JOptionPane.showInputDialog("Enter Number:\n").toString();
email = JOptionPane.showInputDialog("Enter email:\n").toString();
}
public void print()
{
JOptionPane.showMessageDialog(null, "Name: " + name+ "\n" + "Phone: " +number +"\n" + "Email: " + email);
}

public static void main(String[] args) {
MyPhoneBook a[] = new MyPhoneBook[300];
MyPhoneBook b = new MyPhoneBook();
//final Integer[] sorted = ArrayUtils.toObject(MyPhoneBook);
int i,n;
n = Integer.parseInt(JOptionPane.showInputDi… total number:\n"));
for(i=0;i<n;i++)
{
a[i] = new MyPhoneBook();
a[i].input();
}
Arrays.sort(a);
for(i=0;i<n;i++)
{
a[i].print();
}
}

@Override
public int compare(MyPhoneBook o1, MyPhoneBook o2) {
return o1.number.compareTo(o2.number);
}

public int compareTo(MyPhoneBook o) {
if(this.name.equals(o.name)) return this.number.compareTo(o.number);
if(this.number.equals(o.number)) return this.email.compareTo(o.email);
if(this.email.equals(o.email)) return this.name.compareTo(o.name);
return 0;
}
}

最佳答案

这里有几个问题:第一是你的比较实际上不是按字典顺序的。例如,当名称相等时,您在比较逻辑中完全忽略电子邮件地址。第二个问题是您未能将比较器指定为 Arrays.sort() 的参数。

第一个问题:修复比较逻辑

如果您可以在代码中使用第三方库,那么处理此问题的一种非常简洁的方法是使用 ComparisonChain来自 Guava 的类(class)库(Google 的开源核心 Java 库):

public int compareTo(MyPhoneBook o) {
return ComparisonChain
.start()
.compare(name, o.name)
.compare(email, o.email)
.compare(number, o.number)
.result();
}

但是,假设您不能这样做,那么正确的方法如下:

public int compareTo(MyPhoneBook o) {
int nameComparison = name.compareTo(o.name);
if (nameComparison != 0) {
return nameComparison;
}
int emailComparison = email.compareTo(o.email);
if (emailComparison != 0) {
return emailComparison;
}
return number.compareTo(o.number);
}

第二个问题:使用比较器调用 Arrays.sort()

不要使用当前对 Arrays.sort() 的调用,而是使用:

Arrays.sort(a, new PhoneBookComparator());

并将 PhoneBookComparator 定义为单独的 Comparator 类。

关于java - java中用于对对象数组进行排序的比较函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16602882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com