我在LinkedList
表格中存储了[1a,1b,2a,2b,3a,3b, etc.]
,我想将其改组,以便#a
和#b
保持在一起。我知道你可以创建一个同时包含#a
和#b
的对象,然后将这些对象的LinkedList
混乱,但我想知道是否有更方便的方法来执行它。
感谢您的帮助!
答案 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);
}
}
}