Swing Java集合&x27;s分拣带比较器详细信息
我正在使用比较器对IRC用户列表和字符进行排序,如Swing Java集合&x27;s分拣带比较器详细信息,swing,sorting,collections,Swing,Sorting,Collections,我正在使用比较器对IRC用户列表和字符进行排序,如[和.前面的@。如何防止这种情况发生?我希望以这些字符开头的用户属于普通用户。比较器现在看起来: public class UserListSorter implements Comparator<String> { // Get the Collator for the current locale. private Collator collator = Collator.getInstance(); @Overr
[
和.
前面的@
。如何防止这种情况发生?我希望以这些字符开头的用户属于普通用户。比较器现在看起来:
public class UserListSorter implements Comparator<String> {
// Get the Collator for the current locale.
private Collator collator = Collator.getInstance();
@Override // The comparator that implements the abovementioned.
public int compare(String o1, String o2) { // Compare these users.
int compare = compareString(o1.substring(0, 2), o2.substring(0, 2)); // Get the user group of the users (@,+,())
if (compare == 0) { // If both are in the same group, sort by
return compareString(o1, o2); // their name only.
}
return compare; // Else, return a positive value stating
} // that @ and + holds a higher value than ().
private int compareString(String o1, String o2) { // Compares the users alphabetically, ignoring small
return collator.compare(o1, o2); // and capital letters. Used as a basis for sorting algo.
}
}
公共类UserListSorter实现比较器{
//获取当前区域设置的拼贴符。
private-Collator-Collator=Collator.getInstance();
@重写//实现上述功能的比较器。
公共int比较(字符串o1,字符串o2){//比较这些用户。
int compare=compareString(o1.子字符串(0,2),o2.子字符串(0,2));//获取用户的用户组(@,+,())
如果(比较==0){//如果两者都在同一组中,则按排序
返回compareString(o1,o2);//仅限其名称。
}
return compare;//否则,返回一个正值
}//表示@and+的值高于()。
private int compareString(字符串o1,字符串o2){//按字母顺序比较用户,忽略较小的
返回分类符。比较(o1,o2);//和大写字母。用作排序算法的基础。
}
}
谢谢。未经测试,但应做到以下几点:
if (o1.charAt(0) == '@' && o2.charAt(0) != '@') return 2;
else if (o1.charAt(0) != '@' && o2.charAt(0) == '@') return -2;
else if (o1.charAt(0) == '+' && o2.charAt(0) != '+') return 1;
else if (o1.charAt(0) != '+' && o2.charAt(0) == '+') return -1;
else return o1.compareTo(o2);
编辑:当前行为是名称以
@
+
>任何其他开头。未经测试,但应执行以下操作:
if (o1.charAt(0) == '@' && o2.charAt(0) != '@') return 2;
else if (o1.charAt(0) != '@' && o2.charAt(0) == '@') return -2;
else if (o1.charAt(0) == '+' && o2.charAt(0) != '+') return 1;
else if (o1.charAt(0) != '+' && o2.charAt(0) == '+') return -1;
else return o1.compareTo(o2);
编辑:当前的行为是名称以
@
>+
>任何其他名称开头。我建议在这里引入更高级别的抽象,并采用更多面向对象的方法
假设我们创建了一个表示IRC用户的对象,我们将其称为IRCUser
:
class IRCUser implements Comparable<IRCUser>
{
private IRCRole ircRole;
private String nickName; //full nickname
public int compareTo(IRCUser otherUser)
{
//Implementation
}
}
现在,我们的IRCUser的compareTo方法可以从比较
这个
用户的角色开始(确切地说是角色优先级
)将用户角色作为参数传递,然后进行简单的字符串比较。怎么样?我建议在这里引入更高级别的抽象,并采用更多面向对象的方法
假设我们创建了一个表示IRC用户的对象,我们将其称为IRCUser
:
class IRCUser implements Comparable<IRCUser>
{
private IRCRole ircRole;
private String nickName; //full nickname
public int compareTo(IRCUser otherUser)
{
//Implementation
}
}
现在,我们IRCUser的compareTo方法可以从比较
此
用户的角色(确切地说是角色优先级
)与作为参数传递的用户的角色开始,然后进行简单的字符串比较。怎么样?“我如何防止这种情况?”但是您希望的行为是什么?将以“@”开头的用户名放在其他任何行为之前?是的,这是IRC用户列表的正常行为。嗯……这与swing有什么关系?“我如何防止这种情况?”但是您希望的行为是什么?将以“@”开头的用户名放在其他任何行为之前?是的,这是IRC用户列表的正常行为。嗯……这与swing有什么关系?我不确定第二行是否应该是,如果(o1.charAt(0)!='@'和&o2.charAt(0)='@'))return-1;
?那么+
呢?这似乎只是一个部分答案。是的,它必须是“==”(很明显,第三种情况是同时具有等于/不等于的情况)。我不知道你说的“+”是什么意思;如果它是另一个IRC符号,OP没有提到它,但包含它应该很简单。对不起,我认为这是程序员的常识(没有冒犯)。此外,提出的解决方案不起作用,但它使我更好地理解了比较器的工作原理。什么是常识?IRC符号?我已经有一段时间没有使用IRC聊天了,是的。确切地说,解决方案有什么不起作用(除了上述错误)?无论如何,我会编辑以包含+号。我不确定第二行是否不应该是,如果(o1.charAt(0)!='@'&&o2.charAt(0)='@')返回-1;
?那+
呢?这似乎只是一个部分答案。是的,它必须是'='(很明显,第三种情况是同时具有等于/不等于的情况)。我不知道你说的“+”是什么意思;如果它是另一个IRC符号,OP没有提到它,但包含它应该很简单。对不起,我认为这是程序员的常识(没有冒犯)。此外,提出的解决方案不起作用,但它使我更好地理解了比较器的工作原理。什么是常识?IRC符号?我已经有一段时间没有使用IRC聊天了,是的。确切地说,解决方案有什么不起作用(除了上述错误)?无论如何,我会编辑以包含+符号。是的,它可能会起作用,但我不会尝试它,因为这是一个已经过期很久的交付成果。感谢你的建议和你的时间。记录在案,上面提到的解决方案根本不起作用。之前有@的用户分散在各地,我们刚刚结束了wi我在第一篇文章中发布的内容(不完整)。是的,它可能会起作用,但我不会尝试,因为这是一个已经过期很久的交付成果。谢谢你的建议和你的时间。为了记录在案,上面提到的解决方案根本不起作用。在他们之前有@的用户分散在各地,我们刚刚得到了我在第一篇帖子中发布的内容(不完整)。