Ищите, как использовать лямбда-функции Java, чтобы Потребитель мог обрабатывать все объекты, предоставленные Поставщиком, и избавиться от явных циклов while
и null
проверок.
У меня есть Поставщик строкиключи для базы данных, и я хочу использовать Consumer для обработки каждого из этих ключей.
Supplier<String> keyGen = new SimpleKeySupplier(keyPrefix, numKeys);
Consumer<String> consumer = (String key) -> System.out.println("key="+key);
Я хочу, чтобы consumer
обработал каждый ключ, предоставленный keyGen
, и попробовал следующее.Это работает, но я уверен, что должен быть более краткий способ использования лямбда-функций, чтобы сделать это проще.
// 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.