Java:有没有地图函数?

2022-08-31 07:09:04

我需要一个地图函数。Java中已经有这样的东西了吗?

(对于那些想知道的人:我当然知道如何自己实现这个微不足道的功能......)


答案 1

从Java 8开始,在JDK中有一些标准选项可以做到这一点:

Collection<E> in = ...
Object[] mapped = in.stream().map(e -> doMap(e)).toArray();
// or
List<E> mapped = in.stream().map(e -> doMap(e)).collect(Collectors.toList());

请参阅 java.util.Collection.stream()java.util.stream.Collectors.toList()。


答案 2

从java 6开始,JDK中没有函数的概念。

Guava有一个函数接口,
Collections2.transform(Collections<E>,Function<E,E2>)
方法提供了您需要的功能。

例:

// 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);

输出:

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

如今,在Java 8中,实际上有一个map函数,所以我可能会以更简洁的方式编写代码:

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