Конвертировать scala Seq [Double] в список Java <Double>в Java - PullRequest
1 голос
/ 10 октября 2019

Я имел дело с этой проблемой, когда хочу преобразовать Scala Seq[Double] в Java List<Double>. Все, что я нашел, показывает, как это делается из Scala, но я не мог найти, как это сделать из Java.

Вот что у меня есть:

private void fun(Seq<scala.Double> scalaSeq) {
    List<java.lang.Double> l = JavaConverters.seqAsJavaList(scalaSeq).stream().map(a -> java.lang.Double.valueOf(a.toString())).collect(Collectors.toList());
}

Итак, в основном, я конвертирую scala Seq в Java List, транслирую по нему, а затем преобразую строку в Scala Double на Java Double. Я попытался использовать Double::box вместо этого, но компиляторы отказались компилировать, когда я попробовал это. Очевидно, это займет java.lang.Double?

Мне было интересно, есть ли более простой способ сделать это, и я хочу записать это для дальнейшего использования. Есть предложения?

Ответы [ 2 ]

2 голосов
/ 10 октября 2019
Насколько я знаю,

Seq<scala.Double> - это , а не . Это будет полезно в Java (если только оно не изменилось в более поздних версиях Scala). Вместо этого Scala Seq[Double] будет иметь тип Seq<Object>, как видно из Java. Тем не менее, он на самом деле будет содержать java.lang.Double объектов, так что просто "обман" с

@SuppressWarnings("unchecked")
private void fun(Seq<Object> scalaSeq) {
    List<Double> l = (List<Double>) (List<?>) JavaConverters.seqAsJavaList(scalaSeq);
}

или

@SuppressWarnings("unchecked")
private void fun(Seq<Object> scalaSeq) {
    List<Double> l = JavaConverters.seqAsJavaList((Seq<Double>) (Seq<?>) scalaSeq);
}

(все Double есть java.lang.Double) должны работать хорошодостаточно.

0 голосов
/ 10 октября 2019

Вы можете попробовать это:

.map(s-> java.lang.Double.parseDouble(s.toString()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...