gpt4 book ai didi

java - 如何将过滤后的流数组输出收集为列表

转载 作者:行者123 更新时间:2023-11-29 04:18:23 25 4
gpt4 key购买 nike

我是 Java8 语法的新手,我们如何在过滤后得到列表的输出。在我的例子中,过滤器返回一个数组。

已添加到评论中,有没有更好的方法可以得到它

Config config = new Config("ooo", "wc", "code");
Config config1 = new Config("ppp", "wc", "code");
Config config2 = new Config("ooo", "wc", "code");

Config[] configs = {config, config1, config2};

Config config4 = new Config("ooo", "REG", "code");
Config config5 = new Config("ppp", "REG", "code");
Config config6 = new Config("ooo", "REG", "code");

Config[] _configs = {config4, config5, config6};

PromoCode promoCode = new PromoCode(121, "VOUCHER", "121", configs);
PromoCode promoCode1 = new PromoCode(122, "VOUCHER", "122", null);
PromoCode promoCode2 = new PromoCode(123, "LINK", "123", configs);
PromoCode promoCode3 = new PromoCode(124, "VOUCHER", "124", null);
PromoCode promoCode4 = new PromoCode(125, "LINK", "125", _configs);
PromoCode promoCode5 = new PromoCode(126, "LINK", "126", _configs);

List<String> resultantValues = new ArrayList<String>();
PromoCode[] promoCodes = {promoCode, promoCode1, promoCode2, promoCode3, promoCode4, promoCode5};
Stream<PromoCode> stream = Stream.of(promoCodes);
stream.parallel()
.filter(x -> x.getCode().equalsIgnoreCase("VOUCHER"))
.collect(Collectors.toList())
.parallelStream()
.forEach(x-> {
Stream.of(x.getConfigs())
.filter(t -> t.getOccasion().equals("wc"))
//after filter, how can we get the output
// List of list of strings format
.forEach(o -> {
resultantValues.add(o.getProduct()+"_"+o.getProduct());
});
});

System.out.println(resultantValues);

最佳答案

检索 List<List<T>>可以按如下方式完成:

 Stream.of(promoCodes)
.parallel() // is this really needed?
.filter(x -> x.getCode().equalsIgnoreCase("VOUCHER"))
.map(x->
Stream.of(x.getConfigs())
.filter(t -> t.getOccasion().equals("wc"))
.map(o -> o.getProduct()+"_"+o.getProduct())
.collect(Collectors.toList())
)
.collect(Collectors.toList());

或者如果你想要 List<T>格式化然后使用 flatMap :

 Stream.of(promoCodes)
.parallel() // is this really needed?
.filter(x -> x.getCode().equalsIgnoreCase("VOUCHER"))
.flatMap(x->
Stream.of(x.getConfigs())
.filter(t -> t.getOccasion().equals("wc"))
.map(o -> o.getProduct()+"_"+o.getProduct())
)
.collect(Collectors.toList());

或者正如@Holger 提到的那样,对于第二种方法,您可以避免嵌套在 flatMap 中。与:

 Stream.of(promoCodes)
.parallel() // is this really needed?
.filter(x -> x.getCode().equalsIgnoreCase("VOUCHER"))
.flatMap(x -> Arrays.stream(x.getConfigs()))
.map(x -> x.getProduct() + "_" + x.getProduct())
.collect(Collectors.toList());

这绝对更具可读性:


请注意,我还删除了一些不必要的方法调用,例如对列表的中间收集 .collect(Collectors.toList()) , .parallelStream()

关于java - 如何将过滤后的流数组输出收集为列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50855361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com