【发布时间】:2018-07-20 11:31:27
【问题描述】:
我正在尝试使用Comparator.comparing() 对其成员属性进行排序,并且该属性由用户选择。考虑以下情况:
public class MyClass extends BaseClass
{
private String attr1;
private Date attr2;
private ChildClass attr3;
//getter and setter
}
public class ChildClass extends BaseClass
{
private String attr1;
private Date attr2;
private int attr3;
//getter and setter
}
这是我尝试过的,但出现编译错误。
private Map<String, Function<MyClass, ?>> sortingOptions = new HashMap<>();
private String sortBy; //sorting attribute selected by user
@PostConstruct
public void init()
{
//my list to be sort
List<MyClass> list = myService.getList();
sortingOptions.put("attr1", MyClass::getAttr1);
sortingOptions.put("attr2", MyClass::getAttr2);
//......
}
//listener for sorting option changed
public void sortOptionChangedListener()
{
//this line of code having error
list.sort(Comparator.comparing(sortingOptions.get[sortBy]));
}
显示的错误是
The method comparing(Function<? super T,? extends U>) in the type Comparator is not applicable for the arguments (Function<MyClass,capture#3-of ?>)
【问题讨论】: