- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在 scala 上制作 java ArrayList
它是类、文件-字段的排序方法。要使用 ArrayList,我导入了 java.util.ArrayList 和 scala.collection.JavaConversions._
other imports ...
import java.io.File
import java.util.ArrayList
import scala.collection.JavaConversions._
class SortReplays(val files:ArrayList[File]) {
def sort(kindOfSort:String) = {
kindOfSort match {
case "name" => files.sortWith(compareFileNames);
case "length" => files.sortWith(compareGameLength);
case "date" => files.sortWith(compareGameDates);
}
}
这是比较器之一,也是SortReplays的方法
def compareGameLength(file1:File, file2:File) = {
val length1:Long = ReplayViewerController.getGameLength(file1)
val length2:Long = ReplayViewerController.getGameLength(file2)
length1 < length2
}
这就是我在java中所做的
Service.out("scala sorting by length");
long t1 = System.currentTimeMillis();
ArrayList<File> fileList = new ArrayList<File>(Arrays.asList(files));
SortReplays sort = new SortReplays(fileList);
sort.sort("length");
Service.out("scala sort by length, time spend: " + (System.currentTimeMillis() - t1));
try {
controller.refreshLengths(fileList.toArray(new File[0]));
controller.refreshReplays(fileList.toArray(new File[0]));
} catch (Exception e1) {
e1.printStackTrace();
}
我预计文件会被排序 - 但它没有发生,花费了时间,但列出的根本没有任何变化。我也在java中做了同样的事情
public void sortLengths(ArrayList<File> files) {
Collections.sort(files, new Comparator<File>() {
@Override
public int compare(File arg0, File arg1) {
long l1;
long l2;
try {
l1 = getGameLength(arg0);
l2 = getGameLength(arg1);
if(l1 < l2)
return -1;
else if(l1 == l2)
return 0;
else
return 1;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return 0;
}
}
});
}
它按预期工作
最佳答案
问题在于 SortReplays.sort
中调用 files.sortWith
返回一个 Seq
,但不修改 文件
列表。
要解决此问题,您需要:
首先,从 def sort
返回一个 Java List
。可以通过添加隐式转换器来解决:
import scala.collection.JavaConversions._
import scala.collection.JavaConverters._
...
private implicit def toJavaList[T](seq: Seq[T]): util.List[T] = {
new util.ArrayList(seq.asJavaCollection)
}
def sort(kindOfSort: String): util.List[File] = {
kindOfSort match {
case "name" => files.sortWith(compareFileNames);
case "length" => files.sortWith(compareGameLength);
case "date" => files.sortWith(compareGameDates);
}
}
顺便说一句,在 Scala 中为公共(public)函数指定显式返回类型是一个很好的做法(在本例中为 : util.List[File]
)。
ArrayList
声明也应更改为 List
,以尊重程序到接口(interface)原则。
其次,在 Java 端代码中,需要进行一些更改:
SortReplays sort = new SortReplays(Arrays.asList(files));
List<File> fileList = sort.sort("length");
Service.out("scala sort by length, time spend: " + (System.currentTimeMillis() - t1));
try {
controller.refreshLengths(fileList.toArray(new File[0]));
controller.refreshReplays(fileList.toArray(new File[0]));
} catch (Exception e1) {
e1.printStackTrace();
}
顺便说一句,避免捕获Exception
,这很难看。
关于java - scala sortWith 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37452517/
给定 Tuple2 的列表,我想对它们进行排序,以便其中一个的第二个元素是下一个的第一个元素。我试过用 sortWith 来做,但它在某些情况下有效,但在其他情况下无效。谁能看出我哪里搞砸了? Wel
我想按如下方式应用自定义排序比较器: myString.sortWith{ case (c1,c2) => c1.compareTo(c2) c1.compareTo(c2) val str =
我需要在 scala 上制作 java ArrayList 它是类、文件-字段的排序方法。要使用 ArrayList,我导入了 java.util.ArrayList 和 scala.collecti
我正在尝试对一组对象进行排序。 当我尝试使用 sortWith 函数只对对象中的一个字段进行排序时,它工作得很好。 当多个字段被排序时,它就会搞砸。 例如。 scala> val res = bran
我在使用 Ramda sortWith 按多列(升序或降序)对深度嵌套的对象数组进行排序时遇到问题。显然,排序是区分大小写的,并且导致以小写字母开头的值被放置到排序数组的最末尾。 首先,我导入必要的
我使用下面的 sortwith 方法对我的 ArrayList 进行排序,我想它会将订单号从小到大排序。比如10、9、8、7、6....0。但是结果不是我所期望的。请帮助解决这个问题。 company
我在 scala(2.11.8 和 2.12.1)中遇到 Seq[(Long, Double)] _._2) output >>> Seq[(Long, Double)] = List((11,11.
Scala 在标准库中包含了几种对列表进行排序的方法,例如对列表列表进行排序,可以使用: list.sorted list.sortWith(_x) 虽然这些可能是对列表进行排序的最简单方法,但我发现
我只是在探索 kotlin 集合,我观察到了一个重要的行为。 val sports = listOf( Sports("cricket", "7"), Sports("
我是一名优秀的程序员,十分优秀!