簡體   English   中英

從java使用scala.collection.immutable.Set的示例

[英]example of using scala.collection.immutable.Set from java

那些熟悉Scala的人是否知道如何使用Java中的scala.collection.immutable.Set 我可以模糊地閱讀scaladoc,但我不確定如何從java調用scala方法如“ - ”(我假設我只需要在我的類路徑中包含一些scala .jar文件......?)

Scala將這些特殊符號寫為$ plus,$ minus等。您可以通過對scala.collection.immutable.HashSet運行javap來自行查看。

這允許你做這樣的代碼:

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!)
    }
}

這不是一個美女!?

我相信Java 7將允許轉義時髦的方法名稱,所以也許到那時你就可以做到

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

要嘗試此操作,您需要Scala發行版的lib /文件夾中的scala-library.jar。

更新 :修復了Java 7語法,感謝Mirko。

你可以使用它,如果它只用於初始化一套少於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);

根據Adam的回答,以下在Eclipse下使用Scala 2.7.7可以正常工作:

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!)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM