Java 筛选自定义数据类型的源
我正在学习akka streams,并尝试使用我在下面编写的代码过滤源代码:Java 筛选自定义数据类型的源,java,akka,akka-stream,Java,Akka,Akka Stream,我正在学习akka streams,并尝试使用我在下面编写的代码过滤源代码: import akka.NotUsed; import akka.actor.ActorSystem; import akka.stream.javadsl.Sink; import akka.stream.javadsl.Source; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.ut
import akka.NotUsed;
import akka.actor.ActorSystem;
import akka.stream.javadsl.Sink;
import akka.stream.javadsl.Source;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CompletionStage;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException;
public class sd001 {
private static final ActorSystem system = ActorSystem.create("akkassembly");
private static List<RData> ls = new ArrayList();
private static class RData {
private String id;
public RData(String id){
this.id = id;
}
public List<Integer> getValues(){
return Arrays.asList(1,2,3,4,5);
}
public String getId() {
return this.id;
}
}
final static List<RData> builderFunction() {
try {
ls.add(new RData("1"));
ls.add(new RData("2"));
ls.add(new RData("3"));
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return ls;
}
private static double calculateAverage(List <Integer> marks) {
return marks.stream()
.mapToDouble(d -> d)
.average()
.orElse(0.0);
}
public static void main(String[] args) throws ExecutionException, InterruptedException, TimeoutException {
final Source<List<RData>, NotUsed> source =
Source.repeat(NotUsed.getInstance()).map(elem -> builderFunction());
source.filter(x -> x.getId().equals("1"));
}
}
通过阅读akka文档进行筛选:我应该能够筛选列表值?使用
mapcontat
展平集合将显示所需结果:
final Source<List<RData>, NotUsed> source =
Source.repeat(NotUsed.getInstance()).map(elem -> builderFunction());
source.mapConcat(i -> i)
.filter(x -> x.getId().equals("1"))
最终源代码=
repeat(NotUsed.getInstance()).map(elem->builderFunction());
source.mapConcat(i->i)
.filter(x->x.getId().equals(“1”))
因为您得到的是列表流
而不是数据流
final Source<List<RData>, NotUsed> source =
Source.repeat(NotUsed.getInstance()).map(elem -> builderFunction());
source.mapConcat(i -> i)
.filter(x -> x.getId().equals("1"))