Astuces Java. Les librairies qui changent la vie... ;-) Évènement du Comité Technique - 13/06/2012 Préparé et animé par Vivian & Bruno



Documents pareils
Chapitre 10. Les interfaces Comparable et Comparator 1

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Programmation par les Objets en Java

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Java Licence Professionnelle CISII,

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

TD/TP PAC - Programmation n 3

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Tp 1 correction. Structures de données (IF2)

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Gestion distribuée (par sockets) de banque en Java

Corrigés des premiers exercices sur les classes

Nom : Date : Je connais par cœur toutes les opérations jusque 10.

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

TP1. Outils Java Eléments de correction

Programmation des Applications Réparties. Parsers XML DOM et SAX

7 Développement d une application de MapReduce

Utilitaires méconnus de StrataFrame

Programmation avec des objets : Cours 7. Menu du jour

SYNC FRAMEWORK AVEC SQLITE POUR APPLICATIONS WINDOWS STORE (WINRT) ET WINDOWS PHONE 8

Chapitre VI- La validation de la composition.

Le stockage local de données en HTML5

Auto-évaluation Programmation en Java

Utilisation d objets : String et ArrayList

Programmation Web. Madalina Croitoru IUT Montpellier

Plan du cours. Historique du langage Nouveautés de Java 7

Premiers Pas en Programmation Objet : les Classes et les Objets

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Cours d initiation à la programmation en C++ Johann Cuenin

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Création d objet imbriqué sous PowerShell.

EXCEL TUTORIEL 2012/2013

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

TD/TP PAC - Programmation n 3

Utiliser Java sans BlueJ

Java DataBaseConnectivity

RMI le langage Java XII-1 JMF

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Formation : WEbMaster

Hadoop, Spark & Big Data 2.0. Exploiter une grappe de calcul pour des problème des données massives

Synchro et Threads Java TM

Programmation Par Objets

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

OUTIL DE TRAVAIL COLLABORATIF

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Architecture Orientée Service, JSON et API REST

Introduction à JDBC. Accès aux bases de données en Java

TP Programmation Java / JDBC / Oracle

Factorisation Factoriser en utilisant un facteur commun Fiche méthode

Google Analytics - Analysez le trafic de votre site pour améliorer ses performances inclut Universal Analytics (2ième édition)

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Corrigé des exercices sur les références

TP, première séquence d exercices.

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Environnements de développement (intégrés)

Remote Method Invocation (RMI)

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Programmation Orientée Objet

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

ACTIVITÉ DE PROGRAMMATION

Projet de programmation (IK3) : TP n 1 Correction

Programmer en JAVA. par Tama

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

Bases Java - Eclipse / Netbeans

Systeme d'exploitation

Langage Java. Classe de première SI

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Exercices sur les interfaces

Notes de cours Practical BigData

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Le langage C. Séance n 4

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Cours 1: Java et les objets

Classes et Objets en Ocaml.

Apache Camel. Entreprise Integration Patterns. Raphaël Delaporte BreizhJUG

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object

Chapitre V. Les classes : Object, Vector, etc.

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Mardi 9 septembre

Flux de données Lecture/Ecriture Fichiers

ETUDE DE CAS en UML : GESTION DES COMMANDES DE PIECES FABRIQUEES PAR LA SOCIETE C

TD3: tableaux avancées, première classe et chaînes

Machines virtuelles. Brique ASC. Samuel Tardieu Samuel Tardieu (ENST) Machines virtuelles 1 / 40

Introduction : les processus. Introduction : les threads. Plan

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Programme Compte bancaire (code)

Introduction à ElasticSearch

TP Bases de données réparties

Package Java.util Classe générique

1. Base de données SQLite

Généralités sur le Langage Java et éléments syntaxiques.

Transcription:

Astuces Java Les librairies qui changent la vie... ;-) Évènement du Comité Technique - 13/06/2012 Préparé et animé par Vivian & Bruno

Java API 1.5+ Copie de tableaux (voir ArrayUtils d'apache Commons Lang pour les méthodes utilitaires concernant les tableaux, ainsi que Guava, notamment pour la copie de collection "intelligente", voir les contraintes) String[] montableauoriginal = new String[5]; String[] copietableau = Arrays.copyOf(monTableauOriginal, montableauoriginal.length); String[] copiepartielletableau = Arrays.copyOfRange(monTableauOriginal, 0, 2);

Java API 1.5+ Modification d'une collection pendant son parcours List<String> liste = new CopyOnWriteArrayList<String>(); for (String element : liste) { if (element.startswith("a")) { liste.remove(element); } }

Java API 1.5+ Compter le nombre d'occurrences d'un objet dans une collection Collections.frequency(collection, object);

Java API 1.5+ Manipuler une collection Collections.emptyList(); // existe aussi pour Set, Map Collections.sort(liste); Collections.sort(liste, uncomparator); Collections.sort(liste, Collections.reverseOrder()); Collections.unmodifiableList(liste); // existe aussi pour Set, Map, SortedSet, SortedMap Collections.reverse(liste);

Apache Commons Lang Déterminer l'égalité ou le résultat de la comparaison de deux objets, sachant qu'ils peuvent tous les deux être NULL ObjectUtils.equals(object1, object2); ObjectUtils.compare(object1, object2);

Apache Commons Lang Renvoyer un objet différent si l'objet courant/testé est NULL ObjectUtils.defaultIfNull(objet, objetpardefautsinull);

Apache Commons Lang Créer une liste/map à partir des valeurs d'une "enum" EnumUtils.getEnumList(enumClass); EnumUtils.getEnumMap(enumClass);

Apache Commons Lang Rendre une condition booléenne lisible, manipuler des données booléennes BooleanUtils.and(condition1, condition2, condition3); BooleanUtils.or(condition1, condition2, condition3); BooleanUtils.toBoolean(nombreATester, nombrepourvaleurvrai, nombrepourvaleurfaux); BooleanUtils.toBoolean(chaineATester, chainepourvaleurvrai, chainepourvaleurfaux); BooleanUtils.toString(conditionObjetBoolean, chainepourvaleurvrai, chainepourvaleurfaux, chainesibooleannull);

Apache Commons Lang Manipulation de chaînes de caractères StringUtils & WordUtils StringUtils.abbreviate(maChaine, 10); StringUtils.defaultIfEmpty(maChaine, "aucune valeur"); StringUtils.join(listeDeChaines, " - "); StringUtils.difference("abcde", "abxyz"); // "xyz" StringUtils.capitalize("des astuces sont présentées"); // Des astuces sont présentées WordUtils.capitalize("des astuces sont présentées")); // Des Astuces Sont Présentées WordUtils.initials("Chuck Norris"); // CN

Apache Commons Lang Échapper les caractères d'une chaîne pour un format/langage particulier ou retirer les caractères d'échappement StringEscapeUtils.escapeCsv(input); StringEscapeUtils.escapeXml(input); StringEscapeUtils.escapeJava(input); StringEscapeUtils.escapeHtml4(input); StringEscapeUtils.unescapeXXX(input);

Apache Commons Lang Générer des chaînes de caractères RandomStringUtils.randomAlphabetic(5); // azepi RandomStringUtils.randomAlphanumeric(5); // az12e RandomStringUtils.randomNumeric(5); // 45872 RandomStringUtils.randomAscii(5); // 4e[/A

Apache Commons Lang Accéder à des propriétés relatives au système ou à l'utilisateur SystemUtils.FILE_ENCODING; SystemUtils.IS_JAVA_1_6; SystemUtils.JAVA_IO_TMPDIR; SystemUtils.USER_HOME;...

Apache Commons IO Manipulation de fichiers : lecture, écriture, copie, comparaison (voir également IOUtils, qui n'est pas une classe IOcean! ;-)) FileUtils.readFileToByteArray(file); FileUtils.readFileToString(file, encoding); FileUtils.writeByteArrayToFile(file, data); FileUtils.writeStringToFile(file, data, encoding); FileUtils.listFiles(dir, filefilter, dirfilter); FileUtils.copyDirectory(srcDir, destdir); FileUtils.moveDirectory(srcDir, destdir); FileUtils.moveFile(srcFile, destfile); FileUtils.contentEquals(file1, file2); FileUtils.sizeOf(file);

Apache Commons IO Manipulation des chemins et noms de fichiers FilenameUtils.normalize(filename); /* /foo// = /foo/ */ FilenameUtils.normalizeNoEndSeparator(filename); /* /foo// = /foo */ FilenameUtils.separatorsToUnix separatorstowindows(path); /* conversion \ vers / */ FilenameUtils.getFullPathNoEndSeparator(path); /* C:\a\b\c.txt = C:\a\b */ FilenameUtils.getName(path); /* a/b/c.txt = c.txt */ FilenameUtils.getExtension(path); /* a/b/c.jpg = "jpg" */ FilenameUtils.isExtension("monFichier.png", new String[] {"png", "jpg"}); FilenameUtils.wildcardMatch("a.jpg", "*.jpg");

Joda Time Afficher quand a eu lieu la dernière modification de la fiche. Le client ne veut pas que ce soit la date mais depuis quand cette modification a eu lieu Period period = new Period(committed, new DateTime()); PeriodFormatterBuilder builder = new PeriodFormatterBuilder().builder.appendMinutes()..appendSuffix( "minute ago", " minutes ago"); period.tostring(builder.toformatter());

Joda Time Calculer l'âge d'une personne (sans faire un gros paté de code ;)) DateMidnight birthdate = new DateMidnight(1970, 1, 20); DateTime now = new DateTime(); Years.yearsBetween(birthdate, now).getyears()

Joda Time Addition et soustraction de durée(s) DateTime dt = new DateTime(2005, 3, 26, 12, 0, 0, 0); DateTime plusperiod = dt.plus(period.days(1)); DateTime plusduration = dt.plus(new Duration(24L*60L*60L*1000L)); dt.minus(period.months(2)); // enlève l'écart de durée qu'il y a entre dt et aujourd'hui DateTime minusduration = dt.minus(new Duration(dt, new DateTime()));

Guava Pré conditions ou s'assurer que le contrat de notre api est respecté import static com.google.common.base.preconditions.*; public List<Invoice> getinvoices(account compte) { checknotnull(compte); // déclenche un null pointer exception } public void updategasemission(float emission) { checkargument(emission > 10, "emission (%s) rate must be superior", emission); }

Guava Eviter de retourner null. Indiquer clairement que le retour d'une méthode peut ne pas avoir de résultat. Eviter les NullPointerException. Améliorer la lisibilité Exemple, je veux afficher la ville d'une personne //API public Optional<Address> getaddress() { return Optional.fromNullable(address) } //Client de l'api personne.getadress().or(defaultaddress).getville(); //Vérifier si la personne a une adresse : personne.getadress().ispresent()

Guava Ecrire rapidement une méthode permettant de consulter les objets de manière lisible dans le debugger => redéfinition du tostring() avec un helper @Override public String tostring() { return Objects.toStringHelper(this).add("firstName", firstname).add("lastname", lastname).omitnullvalues().tostring(); }

Guava Scinder une chaîne (avec gestion correcte les espaces ou valeurs vides) ou réunir plusieurs chaînes (avec gestion des null) Splitter.on(",").omitEmptyStrings().trimResults().split("test1,, test2, test3"); // on obtient ["test1", "test2", "test3"] Joiner.on(",").skipNulls().join("test1", null, "test2"); // "test1, test2" // on peut aussi utiliser.usefornull("default")

Guava Créer et manipuler une collection qui permet de gérer plusieurs valeurs pour une même clé ; utilisée pour représenter un graphe par exemple Multimap<Integer, String> map= ImmutableSetMultimap.of(1, "a", 2, "b", 3, "c", 1, "a2"); Multimap<Integer, String> map = new ImmutableSetMultimap.Builder<Integer, String>().put(1, "a").put(2, "b").put(3, "c").put(1, "a2").build();

Guava... à découvrir et appronfondir Immutable collections... Multiset... BiMap... Table... ClassToInstanceMap... Contraintes... Classes utilitaires pour manipulation et opérations sur les collections... I/O... Messages... Programmation concurrente... Programmation fonctionnelle...

Questions / Echanges Vous connaissiez? Qu'est-ce que vous utilisez déjà? Qu'est-ce que vous utiliserez? Qu'est-ce que vous utilisez d'autre? Quelles sont les autres problématiques récurrentes que vous rencontrez? (ROTI) Est-ce que cette présentation en valait la peine? 1 : Inutile, 2 : Tout juste utile, 3 : Moyenne, 4 : Bonne, 5: Excellente

Ressources Apache Commons http://commons.apache.org/ Guava http://code.google.com/p/guava-libraries/ JodaTime http://joda-time.sourceforge.net/