据我所知,在Java 8中,映射的工作原理如下
例如:
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
但我的问题是:我如何进行反向映射?喜欢
所以输出就是这个
7 6 5 4 3 2 1
或者不可能这样做?
答案 0 :(得分:2)
在此示例中,我将列表累积为LinkedList。
LinkedList实现Deque(双端队列),允许我以后进先出(LIFO)顺序追加项目。
我使用LinkedList :: addFirst在collect方法中执行累积,它将从流中读取的项目放在列表的头部。
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);
}