пример использования scala.collection.immutable.Set из Java - PullRequest
8 голосов
/ 11 июня 2010

Кто-нибудь, кто знаком со Scala, знает, как я могу использовать scala.collection.immutable.Set из Java?Я смутно читаю скаладок, но не знаю, как вызывать такие методы scala, как "-", из java (я предполагаю, что мне просто нужно включить файл scala .jar в мой путь к классам ...?)

Ответы [ 3 ]

8 голосов
/ 11 июня 2010

Scala записывает эти специальные символы как $ плюс, $ минус и т. Д. Вы можете убедиться в этом сами, запустив javap для scala.collection.immutable.HashSet.

Это позволяет вам делать код следующим образом:

Set s = new HashSet<String>();
s.$plus("one");

Не красиво, и на самом деле он не работает во время выполнения!Вы получаете NoSuchMethodError.Я предполагаю, что это связано с этим обсуждением .Используя обходной путь, который они обсуждают, вы можете заставить вещи работать:

import scala.collection.generic.Addable;
import scala.collection.generic.Subtractable;
import scala.collection.immutable.HashSet;
import scala.collection.immutable.Set;

public class Test {
    public static void main(String[] args) {
        Set s = new HashSet<String>();
        s = (Set<String>) ((Addable) s).$plus("GAH!");
        s = (Set<String>) ((Addable) s).$plus("YIKES!");
        s = (Set<String>) ((Subtractable) s).$minus("GAH!");
        System.out.println(s); // prints Set(YIKES!)
    }
}

Разве это не прекрасно!так что, возможно, к тому времени вы сможете сделать

s = s.#"-"('GAH!')

Чтобы попробовать это, вам нужен scala-library.jar из папки lib / дистрибутива Scala.

Обновление : исправлен синтаксис Java 7, спасибо Мирко.

3 голосов
/ 30 марта 2015

Вы можете использовать это, если только для инициации Набор из менее чем 5 предметов

import scala.collection.immutable.Set;

Set mySet = (Set<String>)new Set.Set1<String>("better")
Set mySet = (Set<String>)new Set.Set2<String>("better","andmore")

Другой способ сделать это заключается в следующем:

import scala.collection.JavaConversions$;
import scala.collection.immutable.Set;
import scala.collection.immutable.Set$;


//code

 java.util.HashSet hashsSet = new java.util.HashSet<String>();
        hashsSet.add("item1");
        hashsSet.add("item2");
        hashsSet.add("item3");
        hashsSet.add("item4");
        hashsSet.add("item5");
        // this is the mutable set of scala
        scala.collection.mutable.Set scalaSet = JavaConversions$.MODULE$.asScalaSet(hashsSet);
//this is immutable set
        Set immutable = scalaSet.toSet();

        System.out.println(immutable);
0 голосов
/ 17 июня 2010

Исходя из ответа Адама, у меня хорошо работает следующее с Scala 2.7.7 под Eclipse:

package com.example.test.scala;

import scala.collection.immutable.HashSet;
import scala.collection.immutable.Set;

public class ImmutableSetTest1 {
    public static void main(String[] args) {
        Set s0 = new HashSet<String>();
        Set[] s = new Set[3];
        s[0] = s0.$plus("GAH!");
        s[1] = s[0].$plus("YIKES!");
        s[2] = s[1].$minus("GAH!");

        for (int i = 0; i < 3; ++i)
            System.out.println("s["+i+"]="+s[i]);
    }
}

который печатает:

s[0]=Set(GAH!)
s[1]=Set(GAH!, YIKES!)
s[2]=Set(YIKES!)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...