gpt4 book ai didi

java - 是否有 BiConsumer 的反向映射到元组等多个值

转载 作者:太空宇宙 更新时间:2023-11-04 12:40:44 28 4
gpt4 key购买 nike

我试图将字符串流映射到这些字符串的哈希值,同时将字符串保留在输出中。我最终将哈希值转换为字符串,以便我可以映射到 String[] 甚至将它们连接在一起作为一个字符串。我更希望 lambda 的输出可以是 String 和 byte[] ,以避免一次转换。如果没有定义一个特定的值对象来仅保存这两个值,是否存在一种互惠的 BiConsumer,即 BiProducer?

public static final ArrayList<String> inputs; // ... initialized elsewhere
...
inputs.parallelStream().map(s -> {
try {
String h = String.format("%032x",
new BigIntger(1, MessageDigest.getInstance("MD5")
.digest(s.getBytes(StandardCharsets.UTF_8))));
String[] r = {s, h};
return r;
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}).foreach(tuple -> {String input = tuple[0], hash = tuple[1]; ...});

你看,如果在 foreach 中我想要一个 byte[] 的哈希值,我会希望传递 map 中已有的内容,否则我将在字符串之间进行转换,只是为了能够方便地传递它。显然,如果我创建一个类来容纳这两种类型,那将是一个费力的解决方案;是否没有预先存在的可供性来将步骤映射到下游的多个值?

最佳答案

抛开对 BiConsumer 的困惑不谈,感谢您的建议 StreamEx在评论中。看起来它有一个非常好的写法:

StreamEx.of(inputs).toMap(Functions.identity(),
s -> {
try {
return new BigIntger(1, MessageDigest.getInstance("MD5")
.digest(s.getBytes(StandardCharsets.UTF_8))));
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}).etc...;

事实证明,对于这种情况,因为我知道输入是唯一的,所以我可以使用可用的 grouping collector 来执行类似的操作。 :

inputs.stream().collect(
toConcurrentMap(Functions.identity(),
s -> {
try {
return new BigIntger(1, MessageDigest.getInstance("MD5")
.digest(s.getBytes(StandardCharsets.UTF_8))));
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}).etc...;

关于java - 是否有 BiConsumer 的反向映射到元组等多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36857666/

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