Como extrair um List <D> de um HashMap <E, R> usando fluxo

Yassine Ben Hamida:

Eu quero saber como extrair um List<D>de um HashMap<E,R>considerando essas restrições:

  • E é uma classe personalizada;
  • Ré uma classe personalizada que contém uma Set<D>de objetos personalizados;

O que eu tentei: Eu tentei abordar a questão em esta questão .

Nesse caso anterior, I simples Map<E,List<R>>, mas neste caso eu tenho para acessar a Rclasse que tem o alvo Set<D>.

O que eu quero fazer na seguinte parte do código é fazer com que os elementos dos Set<D>cujos nomes país são iguais ao parâmetro dado.

Eu tentei usar a mesma solução:

Map<E,R> map = new HashMap<E,R>();
public List<D> method(String countryname) { 
   return map.values().stream().filter((x)->{
        return x.getSet().stream().anyMatch((t) -> {
            return t.getCountry().equals(countryname); 
        });
    })
    .map(R::getSet)
    .flatMap(List::stream)
    .collect(Collectors.toList()); //does not compile
}

// the R class
class R {
    private Set<D> set = new TreeSet<D>();
    //getters & setters & other attributes
}
Eles foram:

Eu acredito que o flatMappasso está errado, já que seu mappasso transforma o seu Stream<R>a um Stream<Set<D>>, então flatMap(List::stream)deve ser flatMap(Set::stream):

return map.values()
          .stream()
          .filter(x -> x.getSet().stream().anyMatch(t -> t.getCountry().equals(countryname)))
          .map(R::getSet)
          .flatMap(Set::stream)
          .collect(Collectors.toList());

Além disso, como você pode notar acima, o código pode ser muito mais legível se você evitar o uso de chaves quando você não tem que.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=137765&siteId=1
Recomendado
Clasificación