gpt4 book ai didi

java - 反转 Collectors.toMap 以添加到 ArrayList

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:42:28 25 4
gpt4 key购买 nike

我想将数字的频率放在 TreeMap 中,以频率作为键,并将具有该频率的数字放在 ArrayList 中。

我有两个问题:

1) 我在第一个参数中收到“无法从静态上下文引用非静态方法”错误(据我所知,流引用了一个对象 - 发生了什么?)

2) Collectors.toMap() 有 4 个参数——似乎参数 4 需要用新的 TreeMap 初始化 >,参数 2 可以是 ArrayList add() 函数,参数 3 可以为 null(可能)。这是怎么做到的?

import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;

public class Main {

public static void main(String[] args) {

List<Integer> array = Arrays.asList(1, 2, 4, 5, 6, 4, 8, 4, 2, 3);

Map<Integer, Long> m = array.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

System.out.println(m);

TreeMap<Long, List<Integer>> tm = m.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getValue, ...));

目前我无法使用 see how to get from https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html到我需要去的地方。

最佳答案

我认为 Collectors.groupingByCollectors.toMap 更能满足您的需求:

Map<Long, List<Integer>> tm = 
m.entrySet()
.stream()
.collect(Collectors.groupingBy(Map.Entry::getValue, // group the entries by the
// value (the frequency)
TreeMap::new, // generate a TreeMap
Collectors.mapping (Map.Entry::getKey,
Collectors.toList()))); // the
// value of the output TreeMap
// should be a List of the
// original keys

您可以将 Collectors.toList() 替换为 Collectors.toCollection(ArrayList::new) 以确保输出的值 MapArrayList(尽管 toList() 的当前实现已经导致 java.util.ArrayList 实例)。

对于您的示例输入,这将生成以下 TreeMap:

{1=[1, 3, 5, 6, 8], 2=[2], 3=[4]}

关于java - 反转 Collectors.toMap 以添加到 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44933207/

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