【问题标题】:Merge Two Lists in two directions合并两个方向的两个列表
【发布时间】:2016-01-23 17:40:31
【问题描述】:

在两个方向上合并两个列表的有效方法是什么,一个以递增方式,另一个以递减方式。两个列表的长度不同。

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

【问题讨论】:

  • 你能显示代码吗?
  • 你能稍微澄清一下你的问题吗?
  • 现在@Mr.Robot 清楚了吗?
  • 所以,你几乎已经拥有了你想要的东西,但只是想让一些迭代器反向迭代,而不调用Collections.reverse(),是这样吗?
  • 我认为Iterators.interleave() 尚未实现。你也必须自己实现那个。

标签: java list arraylist merge


【解决方案1】:

您可以按如下方式使用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 而不是数组
  • 那就更容易了,因为你已经有两个列表,所以你可以立即进入'reverse()'行
【解决方案2】:

List 有一个listIterator() 方法,它返回一个ListIterator,可以通过调用previous() 向后迭代,因此您可以创建自己的实现ListIterator 的类,该类包装另一个ListIterator,反向迭代顺序,即next() 调用previous(),反之亦然。

【讨论】:

    猜你喜欢
    • 2012-02-23
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 2014-12-18
    • 2016-01-12
    • 2011-02-05
    • 1970-01-01
    相关资源
    最近更新 更多