Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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 在维护结构的同时洗牌LinkedList_Java_List_Shuffle - Fatal编程技术网

Java 在维护结构的同时洗牌LinkedList

Java 在维护结构的同时洗牌LinkedList,java,list,shuffle,Java,List,Shuffle,我有一个链接列表以[1a、1b、2a、2b、3a、3b等]的形式存储,我想将其洗牌,以便\a和\b保持在一起。我知道你可以创建一个同时包含#a和#b的对象,然后将这些对象的链接列表洗牌,但我想知道是否有更方便的方法 谢谢你的帮助 使用Java8流可能是最方便的方式 下面是示例代码,运行10次以查看效果 有。您使用的是“shuffle”一词,实际上是对条目a和b进行排序。如果我的假设是正确的,您可以通过使用java.util.Collections.sort()来实现它,这样您就可以将定制的比较器

我有一个
链接列表
[1a、1b、2a、2b、3a、3b等]
的形式存储,我想将其洗牌,以便
\a
\b
保持在一起。我知道你可以创建一个同时包含
#a
#b
的对象,然后将这些对象的
链接列表
洗牌,但我想知道是否有更方便的方法


谢谢你的帮助

使用Java8流可能是最方便的方式

下面是示例代码,运行10次以查看效果


有。您使用的是“shuffle”一词,实际上是对条目a和b进行排序。如果我的假设是正确的,您可以通过使用
java.util.Collections.sort()
来实现它,这样您就可以将定制的比较器实现类传递给sort函数。 下面给出了一个关于如何实现这一目标的示例

class LinkedListSort{

     public static void main(String[] args)
    {
        LinkedList<String> list = new LinkedList<String>();
        String linkedListDataString = "1a,1b,2a,2b,3a,3b";
        for(String str : linkedListDataString.split(",")) {
           list.add(str);
        }

        Collections.sort(list, new Comparator<String>() {
            @Override
            public int compare(String object1, String object2) {
                String suffix1 = object1.substring(object1.length()-1);
                String suffix2 = object2.substring(object2.length()-1);

                return Collator.getInstance().compare(suffix1,suffix2);
            }
        });
        System.out.println("Sorted list entries: ");
        for(String e:list) {
        System.out.println(e);
        }
    }
}
类LinkedListSort{
公共静态void main(字符串[]args)
{
LinkedList=新建LinkedList();
字符串linkedListDataString=“1a、1b、2a、2b、3a、3b”;
对于(字符串str:linkedListDataString.split(“,”)){
添加(str);
}
Collections.sort(list,newcomparator(){
@凌驾
公共整数比较(字符串对象1、字符串对象2){
字符串后缀1=object1.substring(object1.length()-1);
字符串后缀2=object2.substring(object2.length()-1);
返回Collator.getInstance();
}
});
System.out.println(“排序列表条目:”);
for(字符串e:列表){
系统输出打印ln(e);
}
}
}

还有一种更不方便的方法,手动操作。请在您的问题中添加预期结果。具体来说,您的建议是最方便的方法。如果您想使用(目前为止最方便的方式)并希望将
1a
1b
保持在一起,那么您需要一个值对象来保持在一起,并将这些对象洗牌。
class LinkedListSort{

     public static void main(String[] args)
    {
        LinkedList<String> list = new LinkedList<String>();
        String linkedListDataString = "1a,1b,2a,2b,3a,3b";
        for(String str : linkedListDataString.split(",")) {
           list.add(str);
        }

        Collections.sort(list, new Comparator<String>() {
            @Override
            public int compare(String object1, String object2) {
                String suffix1 = object1.substring(object1.length()-1);
                String suffix2 = object2.substring(object2.length()-1);

                return Collator.getInstance().compare(suffix1,suffix2);
            }
        });
        System.out.println("Sorted list entries: ");
        for(String e:list) {
        System.out.println(e);
        }
    }
}