我的要求是通过与任何属性匹配的字符串来过滤对象列表。
例如,假设 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/