在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) 在我测试时,下面的代码执行没有任何问题.但我无法理解逻辑.有人可以解释一下吗?
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)
在上面的示例代码中,我有以下问题.
我有以下清单。我想使用 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流显示错误
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 有什么区别?
我目前正在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) 我正在尝试创建供应商列表.我有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()