Java: existe uma função de mapa?



stream hashmap java (5)

Embora seja uma pergunta antiga, gostaria de mostrar outra solução:

Basta definir sua própria operação usando genéricos java e fluxos java 8:

public static <S, T> List<T> mapAll(Collection<S> collection, Function<S, T> mapper) {
   return collection.stream().map(mapper).collect(Collectors.toList());
}

Do que você pode escrever código como este:

List<String> hex = mapAll(Arrays.asList(10, 20, 30, 40, 50), Integer::toHexString);

Eu preciso de uma função de map . Existe algo assim em Java já?

(Para aqueles que se perguntam: eu sei como implementar essa função trivial eu mesmo ...)



Existe uma biblioteca maravilhosa chamada Functional Java, que lida com muitas das coisas que você gostaria que o Java tivesse, mas isso não acontece. Então, novamente, há também essa maravilhosa linguagem Scala, que faz tudo o que o Java deveria ter feito, mas ainda não é compatível com qualquer coisa escrita para a JVM.



Não há noção de uma função no JDK a partir do java 6.

Guava tem uma interface de Function embora e o
Collections2.transform(Collection<E>, Function<E,E2>)
O método fornece a funcionalidade necessária.

Exemplo:

// example, converts a collection of integers to their
// hexadecimal string representations
final Collection<Integer> input = Arrays.asList(10, 20, 30, 40, 50);
final Collection<String> output =
    Collections2.transform(input, new Function<Integer, String>(){

        @Override
        public String apply(final Integer input){
            return Integer.toHexString(input.intValue());
        }
    });
System.out.println(output);

Saída:

[a, 14, 1e, 28, 32]

Nos dias de hoje, com o Java 8, há realmente uma função de mapeamento, então eu provavelmente escreveria o código de uma maneira mais concisa:

Collection<String> hex = input.stream()
                              .map(Integer::toHexString)
                              .collect(Collectors::toList);




map-function