¿Alguien que esté familiarizado con Scala sabe cómo puedo usar scala.collection.immutable.Set desde Java? Puedo leer vagamente el scaladoc, pero no estoy seguro de cómo llamar a los métodos scala como "-" desde java (supongo que solo necesito incluir algún archivo scala .jar en mi classpath ...?)ejemplo de uso de scala.collection.immutable.Set de java
Respuesta
Scala escribe esos símbolos especiales salen como $ más, $ menos, etc. Puede verlo usted mismo ejecutando javap contra scala.collection.immutable.HashSet.
Eso le permite hacer un código como éste:
Set s = new HashSet<String>();
s.$plus("one");
No es bonita, y que en realidad no funciona en tiempo de ejecución! Obtienes un NoSuchMethodError. Supongo que está relacionado con this discussion. Usando la solución que discuten, puede hacer que las cosas funcionen:
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!)
}
}
¿No es eso una belleza?
Creo Java 7 va a permitir nombres de los métodos cobardes que se escaparon, así que tal vez para entonces podrás hacer
s = s.#"-"('GAH!')
Para probar esto, es necesario scala-library.jar de la lib/carpeta de la distribución de Scala.
Actualización: sintaxis fija de Java 7, gracias Mirko.
Sobre la base de la respuesta de Adán, el siguiente me da buenos resultados con Scala 2.7.7 bajo 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]);
}
}
que imprime:
s[0]=Set(GAH!)
s[1]=Set(GAH!, YIKES!)
s[2]=Set(YIKES!)
se puede usar esta opción si es sólo para init un conjunto de menos de 5 elementos
import scala.collection.immutable.Set;
Set mySet = (Set<String>)new Set.Set1<String>("better")
Set mySet = (Set<String>)new Set.Set2<String>("better","andmore")
Otro Manera de hacerlo es la siguiente:
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);
- 1. Un ejemplo de uso de LibSVM en java
- 2. Ejemplo de uso de SetupDiGetDeviceProperty
- 3. Ejemplo de uso de TLoginCredentialService
- 4. SSHD Ejemplo de Java
- 5. Uso simple de IEnumerator (por ejemplo)
- 6. Ejemplo de uso de boost :: condición :: timed_wait
- 7. Ejemplo de uso de Scalaz Monad
- 8. Ejemplo de uso de hipervínculo en WPF
- 9. Ejemplo de uso de assert en Python?
- 10. Ejemplo de Android uso de RtpStream
- 11. Ejemplo de uso de BLOB en SQLAlchemy
- 12. Ejemplo de uso de MSCHART en C#
- 13. Ejemplo de Java con ClassLoader
- 14. django-ajax-selecciona el uso de ejemplo
- 15. CreateProcessWithTokenW - Ejemplo de uso en C#
- 16. Java BitSet Ejemplo
- 17. Aplicación de ejemplo de Java EE
- 18. Ejemplo de uso de los servicios de cola de audio
- 19. Ejemplo de patrón de generador en la API de Java?
- 20. buen ejemplo de uso de dominio de aplicación
- 21. ¿Algún ejemplo de negocios del uso de cadenas de Markov?
- 22. Uso de Java ThreadPool
- 23. Ejemplo de Akka EventBus para Java
- 24. C# equivalente de Java ejemplo inicializador
- 25. Uso de C++ en Mac para Interactive Broker API? - ¿Ejemplo?
- 26. ejemplo Java GAE DeferredTask?
- 27. Uso de Collections.singletonList() de Java?
- 28. Ejemplo simple de uso de __setstate__ y __getstate__
- 29. Ejemplo de uso de AdditionalMetadata en MVC 3
- 30. ¿Algún ejemplo práctico de uso de LockSupport y AbstractQueuedSynchronizer?
Por desgracia, la sintaxis de Java 7 para llamar nombres exóticos (http://bugs.sun.com/view_bug.do?bug_id=6746458) no es tan hermosa: s = s. # "-" ('GAH!') –
No estoy usando Scala 2.8.0 (que tiene todas las cosas Admitibles/Subtractables) y no necesitaba usar el casting ... la clave para mí era la denominación (p. ej. "$ plus" y "$ minus") y scala-library.jar - ¡gracias! –