moderniser mon java

moderniser mon java - Java - Programmation

Marsh Posté le 16-01-2016 à 01:18:08    

Salut à tous, cela fait quelques années que j'ai pas fait de java, du coup je me demande ce qui a changé depuis le temps.
 
voici ce que j'ai fait:

Code :
  1. final HashMap<Color, Integer> histogram = new HashMap<Color, Integer>();
  2.        for (int i = 0; i < a.length; i += 3) {
  3.            final Color color = new Color(a[i + 0], a[i + 1], a[i + 2]);
  4.            System.out.println(color);
  5.            Integer count = histogram.get(color);
  6.            if (count == null)
  7.                count = 0;
  8.            histogram.put(color, count + 1);
  9.        }


du coup on sent bien que c'est assez accidentel comme code.
est-ce qu'ils ont ajouté des lazy maps ? est-ce qu'ils ont ajouté un opérateur genre elvis pour vérifier null ?  
 
Est-ce qu'il y a d'autres améliorations que je connais pas ?
 
(je vise java 7, mais pour le jeu de la discussion ça peut être intéressant de parler du 8)


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 16-01-2016 à 01:18:08   

Reply

Marsh Posté le 16-01-2016 à 11:05:01    

En Java 8 tu pourrais utiliser les Optional plutôt que de tester si count est null. Mais c'est à la marge.
Toujours en 8, éventuellement utiliser les stream et faire du map/reduce mais je suis pas convaincu que ce soit faisable avec ta structure en tableau. Il faudrait sans doute écrire un consumer custom.

Reply

Marsh Posté le 16-01-2016 à 16:42:11    

ok merci. du coup en 7 y'a pas grand'chose ?


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 16-01-2016 à 16:56:38    

Non, les gros apports de 7, à mon sens, c'étaient le switch sur des strings, JDBC 4.1 et NIO2: http://fr.slideshare.net/boulderju [...] -in-java-7

Reply

Marsh Posté le 17-01-2016 à 16:46:05    

try with resources et multicatch plutot, switch sur les strings on s'en balance un peu [:dawao]

Reply

Marsh Posté le 17-01-2016 à 17:07:30    

Et les diamants.

 
Code :
  1. final HashMap<Color, Integer> histogram = new HashMap<>();


Message édité par DDT le 17-01-2016 à 18:29:08

---------------
click clack clunka thunk
Reply

Marsh Posté le 18-01-2016 à 13:55:13    

Même réponse qu'invik, les lambdas pourraient vraiment clarifier ton code mais ton tableau va poser problème en l'état, voir pour le transformer en amont.

 

Sous réserve de Java 8, un truc un peu plus sexy :

 
Code :
  1. final Map<Color, Long> histogram = Arrays.stream(a)
  2.                .map(aElem -> new Color(/* un truc à partir de tes éléments */))
  3.                .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
 

Vachement plus concis, mais pas applicable en l'état avec ton tableau.

 

Edit : je pensais qu'il y aurait un moyen élégant de transformer ton tableau en une liste de triplet (et donc pouvoir utiliser le code ci-dessus), mais il n'y a rien de builtin pour partitionner un stream en collections de taille fixe (voir ce thread http://stackoverflow.com/questions [...] 8-stream). Peut-être en amont de ton algo ?
   


Message édité par LeRiton le 18-01-2016 à 14:44:14
Reply

Marsh Posté le 18-01-2016 à 19:04:41    

Pour être honnête, mon algo a déjà plus du tout cette gueule là , cette version sert de support de discussion. Je pense que ça a bien marché c'est juste que Java 7 à pas apporté ce que je pensais. Tout l'intéressant est en Java 8.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 18-01-2016 à 23:13:31    

Oui, ils faisaient un peu comme Intel avec ses processeurs donc une roadmap en Tick-Tock: release majeure (nouvelles fonctionnalités importantes) - release mineure (trucs à la marge, syntaxe)
Mais le retard sur Jigsaw a un peu pété le beau plan :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed