J'essayais de convertir un tableau int en List et j'ai pris la voie inconnue de l'utilisation de Java 8 Stream et j'ai trouvé cela
Arrays.stream(arr).boxed().collect(Collectors.toList());
J'ai encore du mal à bien comprendre cette ligne, surtout,
Pourquoi
Collectors.toList()dans ce cas retourne une interface d'ArrayList<Integer>implémentationList? Pourquoi pasLinkedList<Integer>ou toute autre classe générique conforme à l'Listinterface? Je ne trouve rien à ce sujet, à l'exception d'une brève mention d'ArrayList ici , dans la section Notes d'API.Que signifie le panneau de gauche ? C'est évidemment le type de retour générique ( dans mon code ici). Et je pense que c'est l'argument de type générique de la méthode, mais comment sont-ils spécifiés? J'ai regardé dans le document d'interface Collector et je n'ai pas pu l'absorber.
Stream.collect()RArrayList<Integer><R, A>
Collectors.toList()dans ce cas renvoie un ArrayList<Integer>" Il peut ne pas retourner un ArrayList. L' Listimplémentation n'est pas définie , vous ne pouvez donc pas vous fier à l'implémentation qu'elle renvoie. Comme le dit le javadoc : "Il n'y a aucune garantie sur le type , la mutabilité, la sérialisation ou la sécurité des threads de la liste renvoyée;"
toList()ne renvoie pas de ArrayListou List- il renvoie un Collector, ce qui finira par créer et retournera List- également la documentation indique: "... Il n'y a aucune garantie sur le type , la mutabilité, la sérialisation ou la sécurité des threads de la liste retournée; si plus de contrôle sur la liste retournée est nécessaire, utilisez toCollection (Supplier) .... "
Rest le type générique du type résultant.Ale type générique du type d'accumulation intermédiaire du collecteur. C'est le détail de l'implémentation du fonctionnement d'un collecteur. Il divise et conquiert, également pour le traitement parallèle, recueille d'abord en types intermédiaires.