Java 8 extrait la première clé de la valeur correspondante dans une carte

Supposons que j'ai une carte de nom, prénom paires et je veux trouver le nom de la première entrée de la carte avec le nom de famille correspondant à une certaine valeur.
Comment pourrions-nous le faire en java 8 de la mode.

Dans mon cas de test exemple ci-dessous j'ai mis deux façons de le faire.

Cependant la première (à la recherche pour le nom de la première personne avec un nom de famille de "l'Âne") va lancer java.util.NoSuchElementException: Aucune valeur présente de sorte qu'il n'est pas sûr.

Le second fonctionne, mais il n'est pas seulement plus difficile à lire mais c'est un peu pas très fonctionnelle.

Demandais si quelqu'un ici serait de me suggérer une plus facile plus claire de la façon d'atteindre ce but en utilisant soit stream() ou forEach() ou les deux.

@Test
public void shouldBeAbleToReturnTheKeyOfTheFirstMatchingValue() throws Exception {
    Map<String, String> names = new LinkedHashMap<>();
    names.put("John", "Doe");
    names.put("Fred", "Flintstone");
    names.put("Jane", "Doe");
    String keyOfTheFirst = names.entrySet().stream().filter(e -> e.getValue().equals("Doe")).findFirst().get().getKey();
    assertEquals("John", keyOfTheFirst);

    try {
        names.entrySet().stream().filter(e -> e.getValue().equals("Donkey")).findFirst().get();
    } catch (NoSuchElementException e){
        //Expected
    }

    Optional<Map.Entry<String, String>> optionalEntry = names.entrySet().stream().filter(e -> e.getValue().equals("Donkey")).findFirst();
    keyOfTheFirst = optionalEntry.isPresent() ? optionalEntry.get().getKey() : null;

    assertNull(keyOfTheFirst);
}

Vous en remercie d'avance.

source d'informationauteur Julian