我知道在java Collections类中,有一个静态方法排序:
sort(List<T> list, Comparator<? super T> c**)
Run Code Online (Sandbox Code Playgroud)
sort中的第二个参数应该是一个实现Comparator接口的对象,它是比较方法.
但是当我学习lambda的方法参考时,我看到了这个例子:
public class Test
{
public static void main(String[] args)
{
new Test().sortWord();
}
public void sortWord()
{
List<String> lst = new ArrayList<>();
lst.add("hello");
lst.add("world");
lst.add("apple");
lst.add("zipcode");
Collections.sort(lst, this::compareWord);
System.out.println(lst);
}
public int compareWord(String a, String b)
{
return a.compareTo(b);
}
Run Code Online (Sandbox Code Playgroud)
}
这是例如方法的方法参考的示例.compareWord方法与Comparator接口无关,我无法理解为什么这样有效?谁有人解释这个?
非常感谢你.
的参数beforeExecute()在ThreadPoolExecutor类是线程和Runnable接口.
有时我们可能需要覆盖此方法以满足我们的需求.
但是,当我在执行程序中提交一些可调用的任务时.在这里,beforeExecute()我们只能得到Runnable对象,所以我想知道执行者是否可以隐式地将可调用的表单转换为runnable?
我在Executors类中找到一些实用方法,转换Runnable为Callable,但我没有找到相反的方法.