gpt4 book ai didi

java - 如何使用 lambda 实现 Java 的反向映射?

转载 作者:行者123 更新时间:2023-12-02 05:36:09 24 4
gpt4 key购买 nike

据我所知,在Java 8中,映射的工作原理如下

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 

或者不可能这样做?

最佳答案

在此示例中,我将列表累积到 LinkedList 中。 .

LinkedList 实现 Deque (双端队列)允许我按照后进先出 (LIFO) 顺序附加项目。

我使用 LinkedList::addFirst 在收集方法中执行累积,将从流中读取的项目放在列表的头部。

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);

}

关于java - 如何使用 lambda 实现 Java 的反向映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24946514/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com