如何检查 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