Pourquoi est-Streams.allMatch (en Java8) tente d'évaluer toutes les expressions même si la valeur peut être déterminée à mi-chemin?

Praveen Nvs:

Considérez cet extrait -

 String a = "hello" , b = null, c = "guru";
  boolean value = Stream
  .of(a, b, b.substring(2),c)
  .allMatch(x -> x != null);

  System.out.println(value);

Il en résulte NPE. Il semble faire b.substring(2)et depuis best - nullNPE est jeté. Pourquoi est évalué cette condition? La deuxième expression best nullet évalue donc à false. Alors, allMatchsera faux quelles que soient les valeurs de vérité des opérations ultérieures. Dans ce cas, pourquoi est - il tente d'évaluer b.substring(2)?

Cet article et cet article affirmation selon laquelle il ne peut pas évaluer toutes les expressions sinon nécessaires pour déterminer le résultat. Cela ne semble pas clairement être le cas ici.


Avant Java 7 -

if(b != null && b.substring(2) != null)

ce ne serait pas jeter NPE parce b!= nullest falseet il retournerait falselà - bas lui - même. Alors, peut - on dire que Streams.allMatchce n'est pas un équivalent exact de ce qui précède extrait de code Java?


Jean-Baptiste Yunès :

Streams.allMatch n'est pas un équivalent exact de ce qui précède extrait de code Java?

Bien sûr, ce n'est pas! Cours d'eau sont très nouvelle façon de penser le traitement des données.

Quoi qu'il en soit votre problème est (non liée à ce) juste que pour tout appel de fonction, les arguments sont évalués, ainsi l'appel à ofnécessiter l'évaluation de ce b.subString(2)qui jette évidemment un NPE.

Informations connexes de la spécification du langage Java (mettre l'accent sur le mien est):

15.7.4 listes d'arguments sont évalués de gauche à droite

Dans une méthode ou appel constructeur ou expression instance de classe de création, les expressions d'argument peuvent apparaître dans les parenthèses, séparés par des virgules. Chaque expression de l' argument semble être pleinement évalué avant qu'une partie de toute expression d'argument à sa droite.

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=277461&siteId=1
conseillé
Classement