Como criar uma lista diferente se Stream é vazia

VextoR:

há uma boa maneira de criar uma lista diferente se o fluxo está vazio?

Aqui se specialestá vazio Eu quero criar uma nova Listcom outro valor. Mas se specialnão está vazio Eu quero criar Listcom base em special. Não sei se existe uma boa maneira de combiná-las com um fluxo

Aqui está uma solução não tão agradável

class X {
    public static void main(String[] args) {
        String myString = "test";

        List<String> special = getSpecialVals();

        List<String> newVals = 
                special.isEmpty() ? 
                Arrays.asList(myString) : 
                special.stream().map(s -> 
                         createNewVal(s)).collect(Collectors.toList());
    }

    static public List<String> getSpecialVals() {
        // but can return empty list
        return Arrays.asList("One", "Two");
    }

    static public String createNewVal(String origVal) {
        return origVal.toUpperCase();
    }
}
Ousmane D .:

se você quiser tê-lo como um único gasoduto então você poderia fazer:

List<String> strings = 
      Optional.of(special)
              .filter(e -> !e.isEmpty())
              .map(l -> l.stream().map(s -> createNewVal(s))
                                  .collect(Collectors.toList()))
              .orElseGet((() -> Collections.singletonList(myString)));

No entanto, eu não recomendaria processo com esta abordagem, simplesmente porque não é a finalidade pretendida de opcionais.

em vez disso, você seria melhor fora com:

List<String> result;
if(special.isEmpty())
   result = Collections.singletonList(myString);
else
   result = special.stream().map(s -> createNewVal(s)).collect(Collectors.toList());
  • Este último é definitivamente mais legível, portanto, faz com que menos trabalho para o cérebro na tentativa de descobrir o que está acontecendo. ;)
  • Os últimos evita também a criação de uma instância opcional levando a uma melhor eficiência

Acho que você gosta

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