Par exemple

 Map<String, List<String>> headers = connection.getHeaderFields();

    for (String key: headers.keySet()){
        for (String value: headers.get(key)){
            System.out.println(key+":"+value);
        }
    }

Ce code peut-il changer en (Références de méthode) en quelque sorte comme ça?

Consumer<String> consumer = headers::get;
headers.keySet().forEach(consumer);

Mais ce n'est pas correct, je pense qu'il existe un moyen de le faire:

  1. Consumer<String> consumer = headers::get;
  2. BiConsumer<String, String> header = (key, value) -> System.out.println(key+":"+value);
  3. combiner 1,2

Est-ce que ma pensée a raison?

0
lxacoder 11 août 2017 à 19:43

2 réponses

Meilleure réponse

On dirait un cas où vous pouvez utiliser le flatMap:

headers.entrySet().stream()
  .flatMap(k -> k.getValue().stream().map(v -> k + ":" + v))
  .forEach(System.out::println);

Concernant votre question sur Consumer et BiConsumer, elle est totalement manquée - ce ne sont que des interfaces fonctionnelles et ne peuvent être utilisées que pour représenter des fonctions - elles doivent être passées quelque part pour être utilisées.

2
Grzegorz Piwowarek 11 août 2017 à 17:11

Vous pouvez utiliser quelque chose comme ça

headers.forEach((key, value) -> {
        value.forEach((current) -> {
            System.out.println(key + ":" + current);
        });
    });
0
amitdonanand 11 août 2017 à 17:04