标签: method-reference

是否可以在Kotlin中使用println作为函数引用

在Java 8和9中,可以使用方法引用来打印到控制台,例如:

List.of(1, 2, 3).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

在Kotlin中,我没有找到使用方法引用打印到控制台的方法.我试图将其翻译为使用函数引用:

listOf(1, 2, 3).forEach { println(it) }
Run Code Online (Sandbox Code Playgroud)

至:

listOf(1, 2, 3).forEach { ::println }
Run Code Online (Sandbox Code Playgroud)

但是我收到了这个错误:

Overload resolution ambiguity. All these functions match.
@InlineOnly public inline fun println(): Unit defined in kotlin.io
@InlineOnly public inline fun println(message: Any?): Unit defined in kotlin.io
@InlineOnly public inline fun println(message: Boolean): Unit defined in kotlin.io
@InlineOnly public inline fun println(message: Byte): Unit defined in kotlin.io
@InlineOnly public inline fun println(message: Char): Unit defined in kotlin.io
@InlineOnly public inline fun …
Run Code Online (Sandbox Code Playgroud)

java kotlin method-reference

0
推荐指数
1
解决办法
328
查看次数

具有Lambda表达式的本地类

在我测试时,下面的代码执行没有任何问题.但我无法理解逻辑.有人可以解释一下吗?

public static void main(String[] args) {
    List<String> london = new ArrayList<>(Arrays.asList("Chinatown","Croydon","Eden Park"));
    class City{
        private String name;
        City(String name){
            this.name = name;
        }

        public void printCity(){
            System.out.println(name);
        }
    }

    london.stream().map(City::new).forEach(City::printCity); //Chinatown,Croydon,Eden Park
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例代码中,我有以下问题.

  1. foreach方法始终采用消费者对象.在这里,printCity方法不是一个接受参数的方法.它仍然有效.怎么样?
  2. printCity方法在这里不是静态方法.城市本身如何调用实例方法?

java lambda local-class java-stream method-reference

0
推荐指数
1
解决办法
102
查看次数

Java,方法参考 - 如何打印列表值

我有以下清单。我想使用 lambda 和方法引用打印值。第一个 lambda 表达式有效,但我不知道如何使用方法引用打印值,因为我收到编译错误。

List<String> letters = Arrays.asList("a","b","c");

System.out.println("Lambda upperCase forEach");
letters.forEach(l -> System.out.println(l.toUpperCase))); //it works

System.out.println("Method Reference upperCase forEach");
letters.forEach(System.out::println(String::toUpperCase)));  //compilation error
Run Code Online (Sandbox Code Playgroud)

如何使用方法引用打印值?

java lambda method-reference

0
推荐指数
1
解决办法
236
查看次数

Collections.emptyList() 和 Collections::emptyList 有什么区别

编码时使用java流显示错误

Optional.ofNullable(product.getStudents())
                .orElseGet(Collections.emptyList())
                .stream().map(x->x.getId)
                .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

此代码显示以下错误 错误

不兼容的类型,必需的供应商> 但空列表被干扰到 List : 不存在 T 类型变量的实例,因此 List 符合供应商>

但是如果我替换Collections.emptyList()WITH Collections::emptyList It 就完美了。

Collections.emptyList() 与 Collections::emptyList 有什么区别?

java java-8 java-stream method-reference

-1
推荐指数
1
解决办法
244
查看次数

Java Lambda表达式

我目前正在JDK 1.8上学习lambda表达式.我遇到了一些我发现我不理解的代码.

这是代码:

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.lang.Comparable;

/**
 * Hello world!
 *
 */
public class App
{
    public static void main( String[] args ) throws Exception
    {

        List<String> list = Arrays.asList("a", "b", "c");
        sort(list, Comparable::<String>compareTo);

    }

    interface MyComparable {
        public <T extends Comparable<T>> int compare(T obj1, T obj2 );
    }

    public static <T extends Comparable<T>> void sort(List<T> list, MyComparable comp) {

        int n = comp.compare("5","2");
        System.out.println(n);
    }

}
Run Code Online (Sandbox Code Playgroud)

comp.compare("5", "3")最终执行"5".compareTo("2").我的理解是编译器需要找到一个具有相同签名的静态方法

public <T extends …
Run Code Online (Sandbox Code Playgroud)

java lambda java-8 method-reference

-3
推荐指数
1
解决办法
810
查看次数

方法参考 - 无法从静态上下文引用非静态方法

我正在尝试创建供应商列表.我有ClassA和实例方法getOne(),getTwo().然后在ClassB中,我有一个方法来返回供应商列表,如下所示:

public List<Supplier<String>> getData(){
    return Arrays.asList(
        ClassA::getOne,
        ClassA::getTwo
    );
}
Run Code Online (Sandbox Code Playgroud)

我不能使方法静态.我实际上需要从其他类调用getData().这个其他类不知道从哪个类调用哪个方法.它只是从一个抽象类调用getData()(在这种情况下,ClassA扩展了一些抽象类)并迭代列表并调用这些方法.所以这个其他类可以从抽象类的任何实例调用getData()

java method-reference

-3
推荐指数
1
解决办法
401
查看次数