Java 映射到多个值(如元组)时是否有BiConsumer的相反形式
我试图将字符串流映射到这些字符串的散列,同时将字符串也保留在输出中。最后,我将散列转换为字符串,以便可以映射到Java 映射到多个值(如元组)时是否有BiConsumer的相反形式,java,tuples,java-stream,Java,Tuples,Java Stream,我试图将字符串流映射到这些字符串的散列,同时将字符串也保留在输出中。最后,我将散列转换为字符串,以便可以映射到字符串[],甚至可以将它们作为一个字符串连接在一起。我更希望lambda的输出既可以是字符串也可以是字节[]避免一次转换。如果不定义一个特定的值对象来保存这两个值,是否存在一种互惠的BiConsumer,即双生产者 public static final ArrayList<String> inputs; // ... initialized elsewhere ... in
字符串[]
,甚至可以将它们作为一个字符串连接在一起。我更希望lambda的输出既可以是字符串
也可以是字节[]
避免一次转换。如果不定义一个特定的值对象来保存这两个值,是否存在一种互惠的BiConsumer
,即双生产者
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]; ...});
公共静态最终ArrayList输入;//。。。在别处初始化
...
inputs.parallelStream().map(s->{
试一试{
字符串h=String.format(“%032x”,
新的biginger(1,MessageDigest.getInstance(“MD5”)
.digest(s.getBytes(StandardCharsets.UTF_8));
字符串[]r={s,h};
返回r;
}捕获(无算法异常){
抛出新的运行时异常(e);
}
}).foreach(tuple->{String input=tuple[0],hash=tuple[1];…});
你看,如果在
foreach
中我想要一个哈希的字节[]
,我希望传递我在映射中已经拥有的内容,否则我将转换成一个字符串和一个字符串,只是为了方便地传递它。显然,如果我制作一个类来容纳这两种类型,那将是一个费劲的解决方案;对于将步骤映射到下游的多个值,是否存在预先存在的启示?除了对双消费者的困惑之外,感谢您在评论中的建议。看起来它有一个非常好的方式来写这个:
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...;
事实证明,在这种情况下,因为我知道输入是唯一的,所以我可以用可用的:
除了对双消费者的困惑
,感谢您在评论中的建议。看起来它有一个非常好的方式来写这个:
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...;
事实证明,在这种情况下,因为我知道输入是唯一的,所以我可以用可用的:
你的问题自相矛盾。一个BiConsumer
消费了两个项目,但没有产生任何东西。相反,假设的BiSupplier
,会产生两个项目而不消耗任何东西,这对于map
操作是不合适的,该操作需要函数
,该函数消耗一个项目并产生一个项目,因此函数
的对立面也是函数
。其他任何东西都是无用的,因为map
需要函数
参数,因此您必须提供函数
参数,而不进行任何讨论……在当前技术水平下,将这两个值装箱到另一个对象是不可避免的,但是如果您正在寻找一种更令人愉快的编码方式,你可以试试。你的问题自相矛盾。一个BiConsumer
消费了两个项目,但没有产生任何东西。相反,假设的BiSupplier
,会产生两个项目而不消耗任何东西,这对于map
操作是不合适的,该操作需要函数
,该函数消耗一个项目并产生一个项目,因此函数
的对立面也是函数
。其他任何东西都是无用的,因为map
需要函数
参数,因此您必须提供函数
参数,而不进行任何讨论……在目前的技术水平下,将这两个值装入另一个对象是不可避免的,但如果您正在寻找一种更令人愉快的编码方式,您可以尝试。