2017-07-11 1 views
1

Je dois créer une carte Scala immuable avec du code java. J'ai trouvé d'autres choses ici à ce sujet mais rien qui est mis à jour à la version actuelle.Comment convertir une carte Java en carte Scala immuable via un code java?

J'ai essayé:

public static <A, B> Map<A, B> toScalaMap(HashMap<A, B> m) { 
     return JavaConverters.mapAsScalaMapConverter(m).asScala().toMap(
       Predef.<Tuple2<A, B>>conforms() 
     ); 
} 
+0

Quelle est la plus grande image de ce que vous essayez d'atteindre? Pourquoi voulez-vous une carte Scala dans le code Java? – Tyler

+0

Je travaille avec la classe kafka AdminClient qui retourne une collection .scala.immutable.Map et je veux être en mesure de créer un si je peux avoir un simulacre le retourner dans un test unitaire – spillthebeans

+0

alors, que s'est-il passé quand vous l'avez essayé? – Dima

Répondre

1

J'ai changé de conforme à $ conforme et il fonctionne maintenant trouver à la fois dans Intellij et la ligne de commande mais Intellij donne toujours une ligne rouge sous JavaConverters.mapAsScalaMapConverter (m) .asScala(). ToMap (qui dit ne peut pas accéder à scala.Predef . $ moins deux points $ côlon $.

private <A,B> scala.collection.immutable.Map<A, B> toScalaMap(Map<A, B> m) { 
     return JavaConverters.mapAsScalaMapConverter(m).asScala().toMap(
       Predef.$conforms() 
     ); 
    } 
1

Votre code est correct. Le problème est probablement un problème avec la façon dont vous construisez ou exécutez votre code, ou peut-être que vous n'avez pas toutes les importations nécessaires. Les travaux suivants avec la version 4.6.1 de la Scala IDE pour Eclipse et Scala 2,12:

package org.soreadytohelp; 

import java.util.HashMap; 

import scala.Predef; 
import scala.Tuple2; 
import scala.collection.JavaConverters; 
import scala.collection.immutable.Map; 

public class MapTest { 
    public static <A, B> Map<A, B> toScalaMap(HashMap<A, B> m) { 
     return JavaConverters.mapAsScalaMapConverter(m).asScala().toMap(
      Predef.<Tuple2<A, B>>conforms() 
     ); 
    } 

    public static void main(String[] args) { 
     HashMap<String, String> hm = new HashMap<String, String>(); 
     hm.put("food", "bacon"); 

     Map<String, String> hmAsScala = toScalaMap(hm); 
     System.out.println(hmAsScala); 
    } 
} 
0

je suis tombé sur cette question avec IntelliJ, mais il est avéré être juste une erreur du compilateur IntelliJ et a été en mesure d'exécuter via Maven très bien. Essayez d'exécuter/construire votre code pour voir si c'est juste une erreur de compilation.