gpt4 book ai didi

java - 无法解析 Java 流中的方法 Character::hashCode

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:37:13 25 4
gpt4 key购买 nike

在我的示例中,我尝试从一系列字符创建一个 ASCII 表。我设法用字符串的 List 做到了,但是用字符数组失败了。

我得到一个错误,Character::hashCode 无法在 Collectors.toMap() 中解析。

Error:(26, 17) java: method collect in interface java.util.stream.IntStream cannot be applied to given types;
required: java.util.function.Supplier<R>,java.util.function.ObjIntConsumer<R>,java.util.function.BiConsumer<R,R>
found: java.util.stream.Collector<java.lang.Object,capture#1 of ?,java.util.Map<java.lang.Object,java.lang.Object>>
reason: cannot infer type-variable(s) R
(actual and formal argument lists differ in length)
Error:(26, 42) java: incompatible types: cannot infer type-variable(s) T,K,U,T
(argument mismatch; invalid method reference
incompatible types: java.lang.Object cannot be converted to char)

有办法吗?

public class JavaCollectToMapEx2 {

public static void main(String[] args) {
// list of ASCII characters
var chars = List.of("a", "b", "c", "d", "e", "f",
"g", "h", "i", "j", "k", "l", "m", "n",
"o", "p", "q", "r", "s", "t", "u", "v",
"w", "x", "y", "z");

// CharSequence chars2 = "abcdefghijklmnopqrstuvwxyz";
char[] letters = "abcdefghijklmnopqrstuvwxyz".toCharArray();

// Map to represent ASCII character table
Map<Integer, String> asciiMap = chars.stream()
.collect(Collectors.toMap(String::hashCode, Function.identity()));

Map<Integer, Character> asciiMap2 = CharBuffer.wrap(letters).chars()
.collect(Collectors.toMap(Character::hashCode, Function.identity()));

System.out.println(asciiMap);
System.out.println(asciiMap2);
}
}

最佳答案

.chars() 给你一个IntStream ,这是原始流 int , 而不是字符流 ( more info )。这就是为什么 Character 上没有方法引用的原因将工作。

要实现您的目标,您需要 Stream<Character>第一:

Map<Integer, Character> asciiMap2 = CharBuffer.wrap(letters)
.chars()
.mapToObj(e -> (char) e)
.collect(Collectors.toMap(e -> e.hashCode(), Function.identity()));

现在,您仍然有使用方法引用获取哈希码的问题。你不能使用 Character::hashCode因为对于您想要的方法不明确,因为有两种可能的方法:

  1. Object#hashCode 的覆盖,
  2. 静态方法int hashCode(char value)

从这段代码可以看出,两者都满足 toMap() 的第一个参数:

Function<Character, Integer> f1 = e -> Character.hashCode(e);
Function<Character, Integer> f2 = e -> e.hashCode();

要解决此问题,您可以使用 Object::hashCode对于非静态方法调用。

关于java - 无法解析 Java 流中的方法 Character::hashCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56903606/

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