gpt4 book ai didi

scala - 从 Java 过滤 Scala 列表

转载 作者:行者123 更新时间:2023-12-05 01:24:15 24 4
gpt4 key购买 nike

这编译很好,但在运行时爆炸了:

Exception in thread "main" java.lang.NoSuchMethodError: scala.collection.immutable.List.filter(Lscala/Function1;)Lscala/collection/immutable/List

import scala.Function1;
import scala.collection.immutable.List;
import scala.collection.immutable.Nil$;
import scala.runtime.AbstractFunction1;

public class FunProc {
List nil = Nil$.MODULE$; // the empty list
List<Integer> list1 = nil.$colon$colon(1); // append 1 to the empty list
List<Integer> list2 = list1.$colon$colon(2); // append 2 to List(1)
List<Integer> list3 = list2.$colon$colon(3).$colon$colon(14).$colon$colon(8); // List(8, 14, 3, 2, 1)

Function1<Integer, Object> filterFn = new AbstractFunction1<Integer, Object>() {
public Boolean apply(Integer value) { return value<10; }
};

List<Integer> list4 = list3.filter(filterFn); // List(8, 3, 2, 1)

public void doIt() {
System.out.println("Filtered List is " + list4);
}
}

编辑

在试验了 idonnie 的回答后,我想到了这个:

List<Integer> list4 = list3.toTraversable().filter(filterFn).toList();

这与 idonnie 的回答基本相同,只是使用了转换而不是转换。我仍然想知道为什么 toTraversable() 是必要的,因为下面的编译很好:

List<Integer> list4 = list3.filter(filterFn);

最佳答案

对我来说,

$ javac -cp O\:/scala-2.10.0-RC2/lib/scala-library.jar  jfilter/FunProc.java 
jfilter\FunProc.java:19: error: incompatible types
List<Integer> list4 = list3.filter(filterFn); // List(1, 2, 3, 8)
^
required: List<Integer>
found: Traversable<Integer>
Note: jfilter\FunProc.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 error

idonnie 的 Traversable 是可以的。

FWIW,scaladoc 为我们这些不喜欢 IDE 的人显示“定义类”。

这可能是 inconsistent java generics signature 的症状, 与 discussionanalysis interminable .

但是 scalac -Ycheck:jvm TraversableLike.scala 不会提示过滤器。 (我对该 ML 线程的评论是“编译器在发出警告后退出 addGenericSignature”。我的解决方法是在 Scala 中添加一个强制转换以支持互操作。)

关于scala - 从 Java 过滤 Scala 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13850905/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com