如何实现一个反向Map的Java使用的Java?

j1dl9f46  于 2024-01-05  发布在  Java
关注(0)|答案(2)|浏览(151)

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


的数据
例如:

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

字符串
产出:
但我的问题是:**我如何做反向Map?**像



所以输出是这样的

  1. 7 6 5 4 3 2 1


还是不可能这样做?

sg3maiej

sg3maiej1#

在这个例子中,我将列表累积为LinkedList
LinkedList实现了Deque(双端队列),它允许我以后进先出(LIFO)的顺序追加项目。
我使用LinkedList::addFirst在collect方法中执行累加,它将从流中读取的项放置在列表的头部。

  1. public static void main(final String... args) {
  2. final List<String> objList = Arrays.asList("1", "2", "3", "4", "5", "6", "7");
  3. final List<String> reversed = objList.stream()
  4. .collect(LinkedList::new, LinkedList::addFirst, LinkedList::addAll);
  5. //[7, 6, 5, 4, 3, 2, 1]
  6. System.out.println(reversed);
  7. }

字符串
下面的解决方案是确定的,但我不喜欢关闭了原来的列表。

  1. public static void main(final String... args) {
  2. final List<String> objList = Arrays.asList("1", "2", "3", "4", "5", "6", "7");
  3. final List<String> reversed = IntStream.range(-(objList.size() - 1), 1)
  4. .mapToObj(i -> objList.get(-i))
  5. .collect(Collectors.toList());
  6. //[7, 6, 5, 4, 3, 2, 1]
  7. System.out.println(reversed);
  8. }

展开查看全部
2eafrhcq

2eafrhcq2#

从Java 21开始,List有相反的方法,所以一种解决方案是流到List(如您的示例中所示),然后在其上调用reversed()

  1. objList.stream().map(i -> i).reversed().forEach(i -> System.out.print(" " + i));

字符串

相关问题