puis-je utiliser la liste itérables traversent encore et encore dans « foreach »?

StackOverflow https://stackoverflow.com/questions/5325207

  •  25-10-2019
  •  | 
  •  

Question

puis-je utiliser la liste itérables traversent encore et encore? quand j'utiliser ArrayList, je peux parcourir la liste encore et encore dans « foreach », mais quand j'utiliser iterable comme paramètre dans une fonction hadoop (un cadre de calcul distribué), seulement la première fois que peut traverser le iterable, lorsque i utiliser foreach encore, il se nonthing. ex:

public void reduce(Text key, Iterable<Text> values, Context context) 
throws IOException, InterruptedException {

float all=0;
String resultKey;
float resultValue;
ArrayList<String> valuelist=new ArrayList<String>();

for (Text text : values) {
    valuelist.add(text.toString());
}

for (String text : valuelist) {
    String[] contents=text.toString().split(" ");
    if(contents.length==1)
    {
        all=Float.parseFloat(contents[0]);
        break;
    }
}

if(all==0)
{
    return;
}

for (String text : valuelist) {
    String[] contents=text.toString().split(" ");

    if(contents.length>1)
    {
        resultKey=contents[0]+" "+key.toString();
        resultValue=Float.parseFloat(contents[1])/all;

        context.write(new Text(resultKey), new Text(resultValue+""));
    }
}
}

----- je dois enregistrer dans le ArrayList premier ... dans ma compréhension, foreach seulement besoin d'une itératives, pourquoi ArrayList peut, mais le paramètre ne peut pas? Merci pour la lecture de tant.

Était-ce utile?

La solution

Ce n'est pas un problème avec Iterable en général, mais peut-être que c'est un problème avec la classe d'implémentation spécifique qui est en cours passé à cette méthode par le cadre. Si vous pensez à ce sujet, cette classe est probablement tirant chaque élément du Iterable sur le droit du réseau lorsque vous appelez suivant (); Cela expliquerait pourquoi vous ne pouvez pas courir juste encore. Sauver chaque élément est une bonne solution si c'est vraiment ce que vous devez faire.

Autres conseils

Je pense que la question a à voir avec itérateurs être à sens unique, les types de collections uniques. Des collections google-faq:

un itérateur représente un sens unique « Stream » défilement des éléments, et un Iterable est tout ce qui peut frayer itérateurs indépendants. UNE Collection est beaucoup, beaucoup plus que cela, donc nous avons besoin que lorsque nous besoin. 1

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top