gpt4 book ai didi

带有正则表达式的 Java 流过滤器不起作用

转载 作者:行者123 更新时间:2023-12-02 18:18:21 25 4
gpt4 key购买 nike

希望有人能帮助我。我有一个 Invoice 类的 ArrayList 。我想要得到的是过滤这个 ArrayList 并找到其属性与正则表达式匹配的第一个元素。Invoice类如下所示:

public class Invoice {
private final SimpleStringProperty docNum;
private final SimpleStringProperty orderNum;

public Invoice{
this.docNum = new SimpleStringProperty();
this.orderNum = new SimpleStringProperty();
}

//getters and setters
}

我正在使用此正则表达式 (\\D+) 进行过滤,以查找 orderNum 属性中是否存在任何值没有整数的格式。所以基本上我正在使用这个流

    Optional<Invoice> invoice = list
.stream()
.filter(line -> line.getOrderNum())
.matches("(\\D+)"))
.findFirst();

但是这不起作用。任何想法?我一直在搜索,发现如何使用 pattern.asPredicate()this :

Pattern pattern = Pattern.compile("...");

List<String> matching = list.stream()
.filter(pattern.asPredicate())
.collect(Collectors.toList());

使用IntegerString等的List,但我还没有找到如何使用POJO。任何帮助都感激不尽。美好的一天

最佳答案

你就快到了。

Optional<Invoice> invoice = list.stream()
.filter(line -> line.getOrderNum().matches("\\D+"))
.findFirst();

这里发生的是,您创建了一个自定义谓词,用于 filter溪流。它将当前的Invoice转换为 boolean 结果。

<小时/>

如果您已经拥有想要重复使用的已编译Pattern:

Pattern p = …
Optional<Invoice> invoice = list.stream()
.filter(line -> p.matcher(line.getOrderNum()).matches())
.findFirst();

关于带有正则表达式的 Java 流过滤器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46090023/

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