JAVA 8 过滤具有任何匹配属性的对象列表

Muj*_*hid 4 java oop arraylist java-8 java-stream

我的要求是通过与任何属性匹配的字符串来过滤对象列表。例如,假设Contact类具有三个属性:街道、城市、电话。

我知道java流过滤器是如何工作的,我必须将输入字符串与每个属性进行比较,如下所示:

contactList.stream().filter(contact -> contact.getStreet().equals("dubai") || 
                            contact.getCity().equals("dubai") || .......).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

但是,如果一个类具有 20 多个属性且列表大小超过 80,000 个,则将每个属性与输入字符串进行比较会影响性能。所以我的问题是,Java 或任何其他库是否支持使用任何匹配属性过滤列表?如下所示:

contactList.stream().filter(contact -> contact.anyProperty.equals("dubai").collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

有人可以帮我解决这个问题吗,谢谢。

And*_*cus 6

您可以使用findAny。一旦找到候选人,这一切就会结束:

Optional<Contact> contact = contactList.stream().filter(contact -> contact.getStreet().equals("dubai") || 
                        contact.getCity().equals("dubai") || .......).findAny();
Run Code Online (Sandbox Code Playgroud)

或者,如果您只需要此类对象存在的信息,请使用anyMatch

boolean exists = contactList.stream().anyMatch(contact -> contact.getStreet().equals("dubai") || 
                        contact.getCity().equals("dubai") || .......);
Run Code Online (Sandbox Code Playgroud)