如何在java中检查流中的参数? [关闭]
Posted
技术标签:
【中文标题】如何在java中检查流中的参数? [关闭]【英文标题】:How to check params in a stream in java? [closed] 【发布时间】:2022-01-19 23:13:17 【问题描述】:我有一个这样的 .csv 文件:
17/08/2019;15:00;Norwich;Newcastle;3;1;H;S Attwell;1;3;0;0
我必须实现一个“进程”类来处理数据。 获取带参数的字符串数组进行搜索:
List<String> params = new ArrayList<>();
params.add("Newcastle");
params.add("H");
我必须使用流来查找字符串中的参数。 我试过了,但不行:
return params.stream()
.filter(item -> data.contains(item))
.count();
data 是读入并解析的 .csv 文件。
【问题讨论】:
什么不起作用?请附上minimal reproducible example。 顺便说一句,您有大量的 Java 库可供选择,可以为您处理 CSV 文件。 如果您可以使用库 univocity-parsers 是处理 CSV 文件的绝佳选择。 您只有一行 CSV 文件,字段可以是多种类型。您需要按要求提供minimal reproducible example,并包含有关您想要做什么的其他详细信息,显示特定输入的输出。 什么是具有contains()
方法的data
:代表整个文件的字符串、字符串集合(每个字符串代表一个单元格)、一个花哨的类?计算匹配参数的目的是什么?您不应该需要包含参数的过滤行集合吗?应该找到所有个参数还是任何个参数?
【参考方案1】:
tl;r
List
.of( "Newcastle" , "H" )
.stream()
.anyMatch(
List
.of(
"17/08/2019;15:00;Norwich;Newcastle;3;1;H;S Attwell;1;3;0;0"
.split( ";" ) // Returns an array of `String` objects.
) // Returns a `List` object.
:: contains // Defines a method reference, to be passed as a `Predicate` object in our call to `Stream#anyMatch`.
)
看到这个code run live at IdeOne.com。
是的
详情
使用分号作为分隔符,将您的输入字符串解析成片段。
List < String > inputs = List.of( "17/08/2019;15:00;Norwich;Newcastle;3;1;H;S Attwell;1;3;0;0".split( ";" ) ) ;
上面那一行首先通过调用String#split
将输入字符串解析为String
对象的数组。然后将该数组传递给List.of
以实例化List
集合对象。
定义你的目标。
List < String > targets = List.of( "Newcastle" , "H" ) ;
进行比较。使用Stream#anyMatch
在一次点击后停止比较。
boolean inputsContainAtLeastOneTarget =
targets.stream().anyMatch( target -> inputs.contains( target ) ) ;
我们可以通过使用方法引用来缩短 .anyMatch
调用。
boolean inputsContainAtLeastOneTarget =
targets.stream().anyMatch( inputs :: contains ) ;
看到这个code run live at IdeOne.com。
是的
【讨论】:
【参考方案2】:按照说明添加minimal, reproducible example 会很好,但假设您要收集数据中存在的参数。
那么,你可以试试下面的代码sn-p;
List<String> params = new ArrayList<>();
params.add("Newcastle");
params.add("H");
params.add("E");
List<String> data = Arrays.asList("17/08/2019","15:0","Norwich","Newcastle","3","1","H","S Attwell","1","3","0","0");
List<String> existingParamList = params.stream()
.filter(data::contains)
.collect(Collectors.toList());
如果不是这样,请添加示例。
【讨论】:
以上是关于如何在java中检查流中的参数? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章