在两个方向上合并两个列表

3

如何高效地合并两个列表,一个按增加的顺序排序,另一个按减少的顺序排序。两个列表的长度不相同。

List1 = ["eight", "nine"] // first element "eight" should be the starting point
List2 = ["three", "six", "seven", "eight"] // last element "eight" should be the starting point 

因此,最终结果将是:
c= ["eight", "eight", "nine", "seven", "six", "three"]

这并不是我自己的代码,但这是一个例子。在这里,所有列表都从每个列表的first-element开始考虑。但我需要其中一个从first-elementlast-element,而另一个从last-elementfirst-element

List<String> a = [ "one", "two", "three", "four" ];
List<String> b = [ "fee", "fi" ];
List<String> c = [ "broccoli", "tomato", "potato" ];
List<String> d = [ "purple" ];

Iterator<String> interleaved = Iterators.interleave( 
    a.iterator(), b.iterator(),
    c.iterator(), d.iterator() );
int count = 1;
while ( interleaved.hasNext() ) {
   System.out.println( count++ + ": " + interleaved.next() );
}

Output:

1: one
2: fee
3: broccoli
4: purple
5: two
6: fi
7: tomato
8: three
9: potato
10: four

2
你能展示一下代码吗? - burglarhobbit
你能把你的问题说得更清楚一些吗? - Roushan
现在清楚了吗,@Mr.Robot? - Jamal
所以,你几乎拥有了想要的一切,但只是想让一些迭代器反向迭代,而不调用 Collections.reverse() ,是这样吗? - Andreas
@Andreas 是的,Iterators.interleave guava 无法识别,尽管已经添加了 guava。 - Jamal
1
我认为 Iterators.interleave() 还没有被实现。你也必须自己实现它。 - Andreas
2个回答

0
您可以按照以下方式使用Collections
String[] a = ...;
String[] b = ...;
ArrayList<String> firstList = new ArrayList<String>();
ArrayList<String> secondList = new ArrayList<String>();
Collections.addAll(firstList, a);
Collections.addAll(secondList, b);
Collections.reverse(secondList);
firstList.addAll(secondList);

ab 是 ArrayList,而不是数组。 - Jamal
如果你已经有了两个列表,那么这就更容易了,因为你可以直接进行“reverse()”操作。 - S. Pauk

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接