Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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
Swing Java集合&x27;s分拣带比较器详细信息_Swing_Sorting_Collections - Fatal编程技术网

Swing Java集合&x27;s分拣带比较器详细信息

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

我正在使用比较器对IRC用户列表和字符进行排序,如
[
.
前面的
@
。如何防止这种情况发生?我希望以这些字符开头的用户属于普通用户。比较器现在看起来:

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我在第一篇文章中发布的内容(不完整)。是的,它可能会起作用,但我不会尝试,因为这是一个已经过期很久的交付成果。谢谢你的建议和你的时间。为了记录在案,上面提到的解决方案根本不起作用。在他们之前有@的用户分散在各地,我们刚刚得到了我在第一篇帖子中发布的内容(不完整)。