将ArrayList项添加到比较值的新ArrayList

时间:2018-05-22 12:19:10

标签: java android arraylist

我有一个ArrayListinvProperty),其中有两个字段invoice_noinvoice_qty。我想将项目添加到新ArrayListnewProperty),其中invoice_no等于某个值(invNumber)。我正在检查第一个ArrayList。我想出了两种方法,我想知道哪种方法更好,还是有其他解决方案?

invProperty是第一个ArrayList,newProperty是新的ArrayList。 invNumber是我正在检查的值,

for (InvoiceSubData s : invProperty) {
    if (invNumber.equals(s.getInvoiceNo())) {
        newProperty.add(s);
    }
}

for (InvoiceSubData s : invProperty) {
    if (s.getInvoiceNo().contains(invNumber)) {
        newProperty.add(s);
    }
}

5 个答案:

答案 0 :(得分:3)

根据您的标准,您应该使用第一个。第二个可以给你不想要的结果。

例如:如果您的发票编号为" 41235"并且列表中有一个发票编号有" 123"然后它将生成真("41235".contains("123"))并添加到新创建的列表中。

如果您可以在项目中使用Java 8,也可以执行此操作

newProperty = invProperty.stream()
                       .filter(item -> invNumber.equals(item.getInvoiceNo()))
                      .collect(Collectors.toList());

答案 1 :(得分:2)

你可以使用java 8流来做到这一点:

List<InvoiceSubData> newProperty = invProperty.stream()
                .filter(x -> invNumber.equals(x.getInvoiceNo()))
                .collect(Collectors.toList());

答案 2 :(得分:1)

由于您要检查是否相等,因此需要使用第一个版本(使用.equals())。

第二个不正确,因为它也会返回那些子集。例如。 aaa.contains("a")将返回true,但显然不需要。

答案 3 :(得分:0)

您可以使用lambda表达式:

List<InvoiceSubData> newProperty = invProperty.stream().filter(x -> invNumber.equals(x.getInvoiceNo())).collect(Collectors.toList());

答案 4 :(得分:-1)

这个消除了一个额外的循环

$state.go('CustomerDetails')