寻找如何使用 Java lambda 函数,以便消费者可以处理供应商提供的所有对象,并摆脱显式while
循环和null
检查。
我有一个数据库的字符串键供应商,我想使用消费者来处理这些键中的每一个。
Supplier<String> keyGen = new SimpleKeySupplier(keyPrefix, numKeys);
Consumer<String> consumer = (String key) -> System.out.println("key="+key);
我想consumer
处理由提供的每个密钥keyGen
并尝试以下操作。它可以工作,但我确信必须有一种更简洁的方式来使用 lambda 函数来简化它。
// Test that the correct keys have been populated.
Supplier<String> keyGen = new SimpleKeySupplier(keyPrefix, NumKeys);
String k = keyGen.get();
while(k != null) {
consumer.accept(k);
k = keyGen.get();
}
SimpleKeySupplier 有效,简化版本如下:
import java.util.function.Supplier;
public class SimpleKeySupplier implements Supplier<String> {
private final String keyPrefix;
private final int numToGenerate;
private int numGenerated;
public SimpleKeySupplier(String keyPrefix, int numRecs) {
this.keyPrefix = keyPrefix;
numToGenerate = numRecs;
numGenerated = 0;
}
@Override
public String get() {
if (numGenerated >= numToGenerate)
return null;
else
return (keyPrefix + numGenerated++);
}
}
此示例中的消费者已大大简化,可用于在 StackOverflow 上发布。