2014-07-25 60 views
0

據我所知,在Java 8,測繪工作原理如下如何使用lambdas實現反向映射Java?

enter image description here

例如:

List<String> objList = Arrays.asList("1", "2", "3", "4", "5", "6", "7"); 
objList.stream().map(i -> i). forEach(i -> System.out.print(" " + i)); 

輸出:

1 2 3 4 5 6 7 

但我的問題是:我如何做反向映射?

enter image description here

所以輸出將是

7 6 5 4 3 2 1 

或者它是不可能這樣做呢?

+0

你覺得你的'map(i - > i)'實際上做了什麼? –

+0

我展示了我在圖片 –

+0

中理解的不完全解決方案,但更簡單地使用apache lib http://stackoverflow.com/a/2138004/1897935 –

回答

2

在這個例子中,我將這個列表累加到LinkedList

LinkedList實現了Deque(雙端隊列),它允許我以後進先出(LIFO)順序追加項目。

我使用LinkedList :: addFirst在collect方法中執行累加,將LinkedList中的項目讀入列表頭部。

public static void main(final String... args) { 

    final List<String> objList = Arrays.asList("1", "2", "3", "4", "5", "6", "7"); 


    final List<String> reversed = objList.stream() 
     .collect(LinkedList::new, LinkedList::addFirst, LinkedList::addAll); 

    //[7, 6, 5, 4, 3, 2, 1] 
    System.out.println(reversed); 

} 

下面的解決方案是好的,但我不喜歡關閉原來的列表。

public static void main(final String... args) { 

    final List<String> objList = Arrays.asList("1", "2", "3", "4", "5", "6", "7"); 

    final List<String> reversed = IntStream.range(-(objList.size() - 1), 1) 
     .mapToObj(i -> objList.get(-i)) 
     .collect(Collectors.toList()); 

    //[7, 6, 5, 4, 3, 2, 1] 
    System.out.println(reversed); 

} 
+0

這裏太熱了,我的筆記本電腦不工作。如果你想讓我接受你的答案,我會看看你的回答後面的 –

+0

,通過一些解釋我可以學習。謝謝你 –

+0

好吧,我認爲我有可能是最緊密的版本。如果您需要更多解釋,請隨時獲取! – Jeff