Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查ArrayList中数据类中的字符串字段是否具有给定值_Java_Arraylist - Fatal编程技术网

Java 检查ArrayList中数据类中的字符串字段是否具有给定值

Java 检查ArrayList中数据类中的字符串字段是否具有给定值,java,arraylist,Java,Arraylist,我有一个数据类的ArrayList,名为Customer: public class Customer { private String userid; private String fullName; private String phoneNumber; private String email; private String addressOne; private String addressTwo; private String

我有一个数据类的
ArrayList
,名为
Customer

public class Customer {

    private String userid;
    private String fullName;
    private String phoneNumber;
    private String email;
    private String addressOne;
    private String addressTwo;
    private String city;
    private String state;
    private String zip;
    private String country;

    public String getUserid() {
        return userid;
    }

    public void setUserid(String userid) {
        this.userid = userid;
    }

    public String getFullName() {
        return fullName;
    }

    public void setFullName(String fullName) {
        this.fullName = fullName;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getAddressOne() {
        return addressOne;
    }

    public void setAddressOne(String addressOne) {
        this.addressOne = addressOne;
    }

    public String getAddressTwo() {
        return addressTwo;
    }

    public void setAddressTwo(String addressTwo) {
        this.addressTwo = addressTwo;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public String getZip() {
        return zip;
    }

    public void setZip(String zip) {
        this.zip = zip;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }
}
我创建了一个客户列表

ArrayList<Customer> customersList = new ArrayList<Customer>();
ArrayList CustomerList=new ArrayList();
我在循环中加载了许多客户的
ArrayList

如何检查名为“David Paul”的客户是否已在
阵列列表中?

您可以执行以下操作:

boolean contains = customersList.stream()
                     .anyMatch(c -> c.getFullName().equals("David Paul"));
你可以做:

boolean contains = customersList.stream()
                     .anyMatch(c -> c.getFullName().equals("David Paul"));

使用
ArrayList
,您只需逐个元素遍历整个列表,并检查给定客户是否在那里。这将很慢(
O(n^2)
slow)

如果您可以将列表更改为
Set
将是一种首选方法,那么您只需覆盖
hashCode
equals
方法以使用
fullName
,并使用
Set.contains()
以恒定时间检查它。或者,您可以制作一个
地图
,其中键将位于
全名
,并且您可以在固定时间内再次检查给定键是否存在


如果需要保持插入顺序,可以使用
LinkedHashMap
LinkedHashSet
等工具,使用
ArrayList
,只需逐个元素遍历整个列表,并检查给定客户是否在那里。这将很慢(
O(n^2)
slow)

如果您可以将列表更改为
Set
将是一种首选方法,那么您只需覆盖
hashCode
equals
方法以使用
fullName
,并使用
Set.contains()
以恒定时间检查它。或者,您可以制作一个
地图
,其中键将位于
全名
,并且您可以在固定时间内再次检查给定键是否存在


如果您需要保持插入顺序,您可以使用类似于
LinkedHashMap
LinkedHashSet

的方法,它可以工作,如果stackoverflow允许,我将在10分钟内接受它。但是c->c对我来说是新语法。这叫什么?
contains()
够了吗?@DizzyCode在这种情况下不行,我想是因为我使用的是数据类而不是string@Arya
c->……
是Java中引入的lambda表示法8@Arya您可以重写该类中的
equals
方法,仅使用
fullName
,如果您没有在其他任何地方使用它,那么
contains
将起作用,但仍然会很慢。它起作用,如果stackoverflow允许的话,我会在10分钟内接受。但是c->c对我来说是新语法。这叫什么?
contains()
够了吗?@DizzyCode在这种情况下不行,我想是因为我使用的是数据类而不是string@Arya
c->……
是Java中引入的lambda表示法8@Arya如果不在其他任何地方使用,则可以重写该类中的
equals
方法,以仅使用
fullName
,然后
contains
将起作用,但仍然会很慢。遍历列表是O(n)。那么两个客户不一定是因为他们有相同的名字。而且它也不能真正回答OP的问题。@Jeanlogart我理解这个问题,OP希望在每次插入之前检查它,同时读取最后的数据
O(n^2)
(所有客户是否都是唯一的)。我的回答怎么不能回答他的问题呢?我告诉他,对于一个列表,他需要遍历整个列表或更改数据结构。我没有为他编写代码,但这并不意味着我没有回答他的问题。@MateuszDymczyk你的方法很好,但因为我先尝试了Jean的答案,我的程序使用的列表非常小,所以我接受了他的答案。不过我确实对你的答案投了赞成票。@Arya没问题,不是为了分数:-)不过,看看集合和地图吧,仅供将来参考!如果您不明确需要
ArrayList
方法,可以将第一个
ArrayList
更改为一个
List
,Dumczyk,您能解释一下为什么您的解决方案只需要恒定的时间吗?是的,您可以通过这种方式访问它,但是您可以将整个程序的比较减少到全名。。。我们对这个项目不太了解,但特别是在更大的项目中,我不建议像你说的那样去做。这有意义吗?希望…浏览列表是O(n)。那么两个客户不一定是因为他们有相同的名字。而且它也不能真正回答OP的问题。@Jeanlogart我理解这个问题,OP希望在每次插入之前检查它,同时读取最后的数据
O(n^2)
(所有客户是否都是唯一的)。我的回答怎么不能回答他的问题呢?我告诉他,对于一个列表,他需要遍历整个列表或更改数据结构。我没有为他编写代码,但这并不意味着我没有回答他的问题。@MateuszDymczyk你的方法很好,但因为我先尝试了Jean的答案,我的程序使用的列表非常小,所以我接受了他的答案。不过我确实对你的答案投了赞成票。@Arya没问题,不是为了分数:-)不过,看看集合和地图吧,仅供将来参考!如果您不明确需要
ArrayList
方法,可以将第一个
ArrayList
更改为一个
List
,Dumczyk,您能解释一下为什么您的解决方案只需要恒定的时间吗?是的,您可以通过这种方式访问它,但是您可以将整个程序的比较减少到全名。。。我们对这个项目不太了解,但特别是在更大的项目中,我不建议像你说的那样去做。这有意义吗?有希望地。。。