Python的map函数是否有Java等效物?

2022-09-02 21:54:52

我想轻松地将类A的对象的集合(列表)转换为B类的对象的集合,就像Python的map函数一样。是否有任何“众所周知”的实现(某种库)?我已经在Apache的commons-lang中搜索过它,但没有运气。


答案 1

Java 8开始,由于Stream API使用适当的映射器函数,我们将使用该函数将类的实例转换为类的实例。AB

伪代码将是:

List<A> input = // a given list of instances of class A
Function<A, B> function = // a given function that converts an instance 
                          // of A to an instance of B
// Call the mapper function for each element of the list input
// and collect the final result as a list
List<B> output = input.stream().map(function).collect(Collectors.toList());

下面是一个具体示例,它将使用 Integer.valueOf(String) 作为映射器函数将 a 转换为 a:ListStringListInteger

List<String> input = Arrays.asList("1", "2", "3");
List<Integer> output = input.stream().map(Integer::valueOf).collect(Collectors.toList());
System.out.println(output);

输出:

[1, 2, 3]

对于 以前版本的 ,您仍然可以使用 Google Guava 中的 FluentIterable 来替换并使用 com.google.common.base.Function 而不是作为 mapper 函数JavaStreamjava.util.function.Function

然后,前面的示例将重写为下一个示例:

List<Integer> output = FluentIterable.from(input)
    .transform(
        new Function<String, Integer>() {
            public Integer apply(final String value) {
                return Integer.valueOf(value);
            }
        }
    ).toList();

输出:

[1, 2, 3]

答案 2

仍不存在

函数式编程功能将在Java 8中添加 - Lambda项目

我认为谷歌番石榴最适合你现在的需求