对于只包含Str元素的数组,我可以使用grep(Str)来消除a:delete之后的空插槽;
例如:
my @prov_cd = <AB BC MB NB NL NS ON PE QC SK>;
@prov_cd[2]:delete; # Manitoba deleted
@prov_cd; # [AB BC (Any) NB NL NS ON PE QC SK]
my @prov_cd_cleanup = @prov_cd.grep(Str); # get rid of (Any) empty slot: [AB BC NB NL NS ON PE QC SK]
@prov_cd = @prov_cd_cleanup; # [AB BC NB NL NS ON PE QC SK]
Array可以包含各种对象类型;我宁愿“grep”所有不是(Any)的东西。
我该怎么做?
谢谢。
答案 0 :(得分:5)
答案 1 :(得分:5)
首先请注意,如果您通过splice而不是:delete
删除条目,那么这些项目将被移动,并且没有“漏洞”。将会生成。
现在,如果您真的想要过滤掉Any
,可以通过
@prov_cd.grep(* !=== Any)
但是,我怀疑你正在寻找
@prov_cd.grep(*.defined)
答案 2 :(得分:2)
为了回应上述观点并提供一个示例,您可以使用final List<Integer> goodIds = orders.stream().flatMap(o -> o.getGoodsList().stream()).map(Good::getId)
.collect(Collectors.toList());
,它也会返回值&#34;拼接&#34;如果需要的话。
splice
请注意my @prov_cd = <AB BC MB NB NL NS ON PE QC SK>;
# Starting from index 2, remove the next 1 items
my $removed = @prov_cd.splice(2, 1);
say @prov_cd; # OUTPUT: [AB BC NB NL NS ON PE QC SK]
say $removed; # OUTPUT: [MB]
始终返回一个数组,即使您只删除了一个项目。
splice