小编Urc*_*ase的帖子

Java,为什么collections.sort()仍然适用于非比较器类型的参数?

我知道在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接口无关,我无法理解为什么这样有效?谁有人解释这个?

非常感谢你.

java collections lambda

6
推荐指数
1
解决办法
158
查看次数

Java ThreadPoolExecutor类的beforeExecute()中的参数

的参数beforeExecute()ThreadPoolExecutor类是线程Runnable接口.

有时我们可能需要覆盖此方法以满足我们的需求.

但是,当我在执行程序中提交一些可调用的任务时.在这里,beforeExecute()我们只能得到Runnable对象,所以我想知道执行者是否可以隐式地将可调用的表单转换为runnable?

我在Executors类中找到一些实用方法,转换RunnableCallable,但我没有找到相反的方法.

java multithreading executor

2
推荐指数
1
解决办法
164
查看次数

标签 统计

java ×2

collections ×1

executor ×1

lambda ×1

multithreading ×1