如何检查 java 中的流中的参数?
How to check params in a stream in java?
我有一个这样的 .csv 文件:
17/08/2019;15:00;Norwich;Newcastle;3;1;H;S Attwell;1;3;0;0
我必须实施一个“流程”class 来处理数据。
获取一个带参数的字符串数组来搜索 like:
List<String> params = new ArrayList<>();
params.add("Newcastle");
params.add("H");
我必须使用流来查找字符串中的参数。
我试过了但没有用:
return params.stream()
.filter(item -> data.contains(item))
.count();
数据是读入并解析的.csv文件。
如前所述添加一个 minimal, reproducible example 会很好,但假设您想收集数据中存在的参数。
所以,您可以试试下面的代码片段;
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());
如果不是这样,请添加示例。
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。
true
详情
使用分号作为分隔符,将您的输入字符串分解成多个部分。
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。
true
我有一个这样的 .csv 文件:
17/08/2019;15:00;Norwich;Newcastle;3;1;H;S Attwell;1;3;0;0
我必须实施一个“流程”class 来处理数据。 获取一个带参数的字符串数组来搜索 like:
List<String> params = new ArrayList<>();
params.add("Newcastle");
params.add("H");
我必须使用流来查找字符串中的参数。 我试过了但没有用:
return params.stream()
.filter(item -> data.contains(item))
.count();
数据是读入并解析的.csv文件。
如前所述添加一个 minimal, reproducible example 会很好,但假设您想收集数据中存在的参数。
所以,您可以试试下面的代码片段;
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());
如果不是这样,请添加示例。
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。
true
详情
使用分号作为分隔符,将您的输入字符串分解成多个部分。
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。
true