【发布时间】:2021-03-16 18:31:13
【问题描述】:
如何在java 8流中使用过滤器过滤出复杂的对象列表。 假设我有这样的课程
public class InfoLite{
private String right;
List<Others> options;
private String new;
}
//getter,setter and constructor
public class Others{
private String workId;
private String work;
}
//getter,setter and constructor
我有一个与此类似的信息对象
List<InfoLite> info = new ArrayList<>();
List<Others> options = new ArrayList<>();
options.add(new Others(1,"game"))
options.add(new Others(2,"unit"))
options.add(new Others(3,"dest"))
List<Others> options2 = new ArrayList<>();
options.add(new Others(1,"console"))
options.add(new Others(2,"unit"))
List<Others> options3 = new ArrayList<>();
options.add(new Others(1,"zan"))
options.add(new Others(2,"zebvra"))
List<Others> options4 = new ArrayList<>();
options.add(new Others(1,"zan"))
options.add(new Others(2,"lon"))
options.add(new Others(3,"car"))
info.add(new Test("game,unit",options,"Florida"));
info.add(new Test("console",options2,"Florida"));
info.add(new Test("zebvra",options3,"Florida"));
info.add(new Test("lon",options4,"Florida"));
在这里我如何过滤info 列表,以便我可以获得这样的新列表
List<InfoLite> newInfo = new ArrayList<>();
List<Others> options = new ArrayList<>();
options.add(new Others(1,"game"))
options.add(new Others(2,"unit"))
List<Others> options2 = new ArrayList<>();
options.add(new Others(1,"console"))
List<Others> options3 = new ArrayList<>();
options.add(new Others(2,"zebvra"))
List<Others> options4 = new ArrayList<>();
options.add(new Others(2,"lon"))
info.add(new Test("game,unit",options,"Florida"));
info.add(new Test("console",options2,"Florida"));
info.add(new Test("zebvra",options3,"Florida"));
info.add(new Test("lon",options4,"Florida"));
这里Others 对象基本上被过滤了,即只过滤Others 列表中与info 中的right 匹配值的对象。如果info 中的right 是逗号分隔的,则拆分right 并签入每个Others 列表对象并返回值。
我尝试的到这里,但是我很困惑下一步该做什么。
info.stream()
.filter(option -> Arrays.stream(option.getRight().split(",")).collect(Collectors.toList()).contains(option.getOptions().stream().filter(Others :: getWork))))``
【问题讨论】:
标签: java java-stream