我想使用Stream API在使用函数更改变量时跟踪变量。
我的代码:
public String encoder(String texteClair) {
for (Crypteur crypteur : algo) {
texteClair = crypteur.encoder(texteClair);
}
return texteClair;
}
我有一个包含方法的类列表,我想在所有这些类中放入一个变量,就像上面代码中所做的那样。
它工作得很好,但我想知道如何用流来完成?
我们可以使用reduce()
?
我们可以使用reduce()
?
我想我们可以。但请记住,使用流并不是最好的情况。
因为您提到了复数形式的“类”,所以我假设Crypteur
要么是抽象类,要么是接口。一般来说,你应该更喜欢接口而不是抽象类,所以我假设Crypteur
是一个接口(如果不是,这不是一个大问题),并且它至少有一个类似的实现:
public interface Encoder {
String encoder(String str);
}
public class Crypteur implements Encoder {
private UnaryOperator<String> operator;
public Crypteur(UnaryOperator<String> operator) {
this.operator = operator;
}
@Override
public String encoder(String str) {
return operator.apply(str);
}
}
然后,你可以利用你的编码器和流如下:
public static void main(String[] args) {
List<Crypteur> algo =
List.of(new Crypteur(str -> str.replaceAll("\\p{Punct}|\\p{Space}", "")),
new Crypteur(str -> str.toUpperCase(Locale.ROOT)),
new Crypteur(str -> str.replace('A', 'W')));
String result = encode(algo, "Every piece of knowledge must have a single, unambiguous, authoritative representation within a system");
System.out.println(result);
}
public static String encode(Collection<Crypteur> algo, String str) {
return algo.stream()
.reduce(str,
(String result, Crypteur encoder) -> encoder.encoder(result),
(result1, result2) -> { throw new UnsupportedOperationException(); });
}
请注意,combiner
(用于并行合并部分结果)故意抛出异常,以指示此任务不可并行化。所有转换都必须按顺序应用,例如,我们不能在给定字符串上应用一些编码器,然后在给定字符串上分别应用其余的编码器,并合并两个结果——这是不可能的。
输出
EVERYPIECEOFKNOWLEDGEMUSTHWVEWSINGLEUNWMBIGUOUSWUTHORITWTIVEREPRESENTWTIONWITHINWSYSTEM
使用原子引用
,它实际上是最终的,但其包装值可能会发生变化:
public String encoder(String texteClair) {
AtomicReference<String> ref = new AtomicReference<>(texteClair);
algo.stream().forEach(c -> ref.updateAndGet(c::encoder)); // credit Ole V.V
return ref.get();
}
问题内容: 我需要能够调用一个函数,但是函数名称存储在变量中,这可能吗?例如: 问题答案: 要么
尝试解决问题 http://www.hackerearth.com/problem/algorithm/sum-of-medians-1/ 并考虑使用多集来解决它,因为它可能包含重复的值。我尝试按如下方式编写代码:
问题内容: 我的同事在工作中提出了一个我无法回答的问题(由于缺乏经验),该问题与跟踪表中相关字段的变化有关。 想象一下,我们有3个表,每个表20个字段。在此示例中,我们考虑这些表中的每一个都有2个字段,一个名为LastUpdatedOn,另一个名为LastUpdatedBy。 如果我们只想跟踪这3个表中的更改,而只跟踪几个特定字段,而没有为每个表创建包含更新前最新版本的历史表,那么我们如何跟踪这些
我有这个变量: 通过单击按钮,我执行此功能: 变量不会改变,我的输出是: 但是如果我第二次按下按钮,我会得到输出: 为什么值第一次不改变?
我尝试记录JPA实体的任何更改。因此,每个实体都继承自一个抽象实体类,该类具有日志条目对象列表。 AbstractEntity类: LogEntry类: 我的方法是创建一个新的LogEntry对象,并在实体更新或持久化之前将其添加到实体的LogEntry列表中。 我尝试了以下解决方案: 几乎所有这些试验都使我能够更改受影响实体的属性(如名称或validTo)。但没有任何解决方案提供创建新LogEn
本文向大家介绍如何在Python中更改不可变字符串的ID?,包括了如何在Python中更改不可变字符串的ID?的使用技巧和注意事项,需要的朋友参考一下 Python中的字符串是不可变的,这意味着一旦创建了字符串,就无法更改它。创建字符串时,如果创建相同的字符串并将其分配给另一个变量,则它们都将指向相同的字符串/内存。例如, 字符串对象的这种重用在Python中称为Interning。相同的字符串具