Java 8从Map中的匹配值中提取所有键 [英] Java 8 extract all keys from matching values in a Map

查看:932
本文介绍了Java 8从Map中的匹配值中提取所有键的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对Java8还是比较陌生,我有一个场景,我需要从Map中检索与对象匹配的所有键.

I'm relatively new to Java8 and I have a scenario where I need to retrieve all the keys from the Map which matched with the objects.

想知道是否有一种方法可以获取所有密钥,而无需再次从列表中进行迭代.

Wanted to know if there is a way to get all keys without iterating them from the list again.

Person.java
private String firstName;
private String lastName;
//setters and getters & constructor


MAIN Class.

String inputCriteriaFirstName = "john";   

Map<String, Person> inputMap = new HashMap<>();
Collection<Person> personCollection = inputMap.values();
List<Person> personList = new ArrayList<>(personCollection);
List<Person> personOutputList = personList.stream()
.filter(p -> p.getFirstName().contains(inputCriteriaFirstName ))
.collect(Collectors.toList());


//IS There a BETTER way to DO Below ??

Set<String> keys = new HashSet<>();
for(Person person : personOutputList) {
    keys.addAll(inputMap.entrySet().stream().filter(entry -> Objects.equals(entry.getValue(), person))
        .map(Map.Entry::getKey).collect(Collectors.toSet()));
}

推荐答案

inputMap.entrySet() 
        .stream()
        .filter(entry -> personOutputList.contains(entry.getValue()))
        .map(Entry::getKey)
        .collect(Collectors.toCollection(HashSet::new))

这篇关于Java 8从Map中的匹配值中提取所有键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆