在保持结构的同时改组LinkedList

时间:2016-08-27 17:05:35

标签: java list shuffle

我在LinkedList表格中存储了[1a,1b,2a,2b,3a,3b, etc.],我想将其改组,以便#a#b保持在一起。我知道你可以创建一个同时包含#a#b的对象,然后将这些对象的LinkedList混乱,但我想知道是否有更方便的方法来执行它。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

使用Java 8流可能是最方便的方式。

以下是示例代码,运行10次以查看https://dev.mysql.com/doc/connector-cpp/en/connector-cpp-usage-notes.html的效果。

List<String> input = Arrays.asList("1a","1b","2a","2b","3a","3b");
for (int i = 0; i < 10; i++) {
    List<List<String>> tmp = new ArrayList<>(input.stream()
            .collect(Collectors.groupingBy(s -> s.substring(0,1)))
            .values());
    Collections.shuffle(tmp);
    LinkedList<String> output = tmp.stream()
            .flatMap(List::stream)
            .collect(Collectors.toCollection(LinkedList::new));
    System.out.println("\t" + output);
}

输出

[1a, 1b, 2a, 2b, 3a, 3b]
[2a, 2b, 3a, 3b, 1a, 1b]
[3a, 3b, 1a, 1b, 2a, 2b]
[1a, 1b, 2a, 2b, 3a, 3b]
[3a, 3b, 1a, 1b, 2a, 2b]
[1a, 1b, 2a, 2b, 3a, 3b]
[2a, 2b, 3a, 3b, 1a, 1b]
[3a, 3b, 2a, 2b, 1a, 1b]
[1a, 1b, 2a, 2b, 3a, 3b]
[1a, 1b, 3a, 3b, 2a, 2b]

答案 1 :(得分:0)

是的。您正在使用&#34; shuffle&#34;实际排序条目#a和#b保持在一起。如果我的假设是正确的,您可以使用java.util.Collections.sort()来实现它,这样您就可以将定制的Comparator实现类传递给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);
        }
    }
}