gpt4 book ai didi

Java函数式-反转ANY对象的ANY列表类型

转载 作者:行者123 更新时间:2023-11-30 06:08:19 24 4
gpt4 key购买 nike

我正在尝试在 Java 8 中编写一个 lambda 函数,该函数将采用任何对象的任何类型的列表。这个简单的函数将反转列表,关键是我希望这个函数获取任何对象的列表。函数/类如下:

import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;

public abstract class ReverseListFunction {

// function which reverses a list
public static Function<List<Object>, List<Object>> reverseList = (List<Object> l) -> {
int midPoint = endIndex/2;
for (int i = endIndex; i > midPoint; i-- ) {
Object temp = l.get(i);
int distanceFromEndIndex = endIndex - i;
l.set(i, l.get(distanceFromEndIndex));
l.set(distanceFromEndIndex, temp);
}
return l;
};

}

我已将其设置为静态,因此我可以在不实例化该类的情况下调用它,如下所示:

import java.util.ArrayList;

public class Main {

public static void main(String[] args) {

List<Integer> ints = new ArrayList<>();
for (int i = 0; i < 100; i++ ) {
// int i is cast to Integer and added to ints
ints.add(i);
}

// This line prevents compilation
ints = ReverseListFunction.reverseList.apply(ints);

}

}

上面段中的最后一行给出了一个错误,指出 apply(List) 无法应用于参数 ArrayList。我想知道解决这个问题的最佳方法是什么,以便我的函数能够采用这样的整数 ArrayList,或者实际上任何对象。

一个想法是使用泛型,但是我无法从静态上下文中使用该函数,并且当我更改要在 ReverseListFunction 实例上调用的函数时,它仍然出错,因为我提供的是 ArrayList,而不是一个列表。

那么,如果存在的话,解决这个问题的功能方式是什么?

最佳答案

您不需要创建 lambda 来创建 Function 对象。您可以在类中创建静态方法并使用方法引用:

public static <T> List<T> reverseList(List<T> l) {
int endIndex = l.size() - 1;
int midPoint = endIndex/2;
for (int i = endIndex; i > midPoint; i-- ) {
T temp = l.get(i);
int distanceFromEndIndex = endIndex - i;
l.set(i, l.get(distanceFromEndIndex));
l.set(distanceFromEndIndex, temp);
}
return l;
}

并使用方法引用:

Function<List<Integer>, List<Integer>> reverseFunction = ReverseListFunction::reverseList;

顺便说一句,要反转列表,Collections 中有一个方法可用,您可以这样做:

Collections.reverse(myList);

关于Java函数式-反转ANY对象的ANY列表类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40019836/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com