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

标签 java oop arraylist java-8 java-stream

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

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

contactList.stream().filter(contact -> contact.getStreet().equals("dubai") || 
                            contact.getCity().equals("dubai") || .......).collect(Collectors.toList());

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

contactList.stream().filter(contact -> contact.anyProperty.equals("dubai").collect(Collectors.toList());

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

最佳答案

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

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

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

boolean exists = contactList.stream().anyMatch(contact -> contact.getStreet().equals("dubai") || 
                        contact.getCity().equals("dubai") || .......);

关于JAVA 8 过滤具有任何匹配属性的对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60538682/

相关文章:

java - 如何修复此运行时错误 : java. lang.IndexOutOfBoundsException

Java - 迭代 HashMap 替换 ArrayList

java - 了解 Spring Boot @Autowired

java - Java Applet 内某些像素位置的颜色?

oop - 如何在 CoDeSys 中放置自定义功能 block 的实例?

.net - 实现 ICloneable 时是否应该提供深度克隆?

python - 为什么我的列表没有按照预期的方式改变?

java - 数组列表自定义位置

java - GWT 代码分割不触发 AJAX 请求

java - 通过滑动切换屏幕/Activity Android Java