Créer une liste distincte à partir de la liste existante dans Java 7 et 8?

Si j'ai:

List<Integer> listInts = { 1, 1, 3, 77, 2, 19, 77, 123, 14, 123... }

en Java, ce qui est un moyen efficace de créer un List<Integer> listDistinctInts contenant uniquement les distinctes valeurs de listInts?

Ma pensée est de créer un Set<Integer> setInts contenant toutes les valeurs du listInts alors appel List<Integer> listDistinctInts = new ArrayList<>(setInts);

Mais cela semble potentiellement inefficace - est-il une meilleure solution à l'aide de Java 7?

Je ne suis pas à l'aide de Java 8, mais je crois que l'aide, je pouvais faire quelque chose comme ceci(?):

List<Integer> listDistinctInts = listInts.stream().distinct().collect(Collectors.toList());

Cela serait-il plus performant que l'approche ci-dessus et/ou est-il un moyen plus efficace de le faire en Java 8?

Enfin, (et je suis conscient que le fait de poser de multiples questions peut-être mal vu mais c'est directement liée) si je ne se souciait de l' compter d'éléments distincts dans listInts est-il un moyen plus efficace pour obtenir cette valeur (en Java 7 et 8) - sans la création préalable d'une liste ou d'un ensemble de tous les éléments distincts?

Je suis le plus intéressé à Java en natif façons d'y parvenir et éviter la re-inventer de toutes les roues, mais roulé à la main le code ou les bibliothèques si elles offrent une meilleure clarté ou la performance. J'ai lu cette question relative à la Java - Liste Distincte des Objets mais ce n'est pas tout à fait clair sur les différences de performance entre les Java 7 et 8 approches ou s'il pourrait y avoir de meilleures techniques?

source d'informationauteur Matt Coubrough