Last active
August 1, 2018 08:53
-
-
Save pierrefevrier/12f7750d784eb6874c7cc664932222ad to your computer and use it in GitHub Desktop.
Java Samples
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Retourne l'unique élément de la collection, en vérifiant que la collection ne | |
* contient effectivement qu'un et un seul élément. | |
* | |
* @param objets la collection d'objets | |
* @return l'unique élément | |
*/ | |
public static final <T> T findUnique(final Collection<T> objets) { | |
return objets.stream() // | |
.reduce((a, b) -> { | |
throw new ErreurTechnique("La collection contient plus d'un élément"); | |
}) // | |
.orElseThrow(() -> new ErreurTechnique( | |
"La collection ne contient aucun élément")); | |
} | |
/** | |
* Retourne l'unique élément de la liste qui correspond au prédicat, en vérifiant que | |
* la collection ne contient effectivement qu'un et un seul élément correspondant au | |
* prédicat. | |
* | |
* @param objets la collection d'objets | |
* @param predicat le prédicat | |
* @return l'élément qui correspond au prédicat | |
*/ | |
public static final <T> T findUnique(final Collection<T> objets, | |
final Predicate<T> predicat) { | |
return objets.stream() // | |
.filter(predicat) // | |
.reduce((a, b) -> { | |
throw new ErreurTechnique( | |
"Plusieurs éléments correspondent au prédicat"); | |
}) // | |
.orElseThrow(() -> new ErreurTechnique( | |
"Aucun élément ne correspond au prédicat")); | |
} | |
/** | |
* Retourne l'unique élément de la liste, en vérifiant que la collection contient au | |
* maximum un seul élément. | |
* | |
* @param objets la collection d'objets | |
* @return l'uniquement élément s'il existe, null sinon | |
*/ | |
public static final <T> T findUniqueIfExists(final Collection<T> objets) { | |
return objets.stream() // | |
.reduce((a, b) -> { | |
throw new ErreurTechnique("La collection contient plus d'un élément"); | |
}) // | |
.orElse(null); | |
} | |
/** | |
* Retourne l'unique élément de la liste qui correspond au prédicat, en vérifiant que | |
* la collection contient au maximum un seul élément correspondant au prédicat. | |
* | |
* @param objets la collection d'objets | |
* @param predicat le prédicat | |
* @return l'élément qui correspond au prédicat, null si aucun élément ne correspond | |
* au prédicat | |
*/ | |
public static final <T> T findUniqueIfExists(final Collection<T> objets, | |
final Predicate<T> predicat) { | |
return objets.stream() // | |
.filter(predicat) // | |
.reduce((a, b) -> { | |
throw new ErreurTechnique( | |
"Plusieurs éléments correspondent au prédicat"); | |
}) // | |
.orElse(null); | |
} | |
/** | |
* Filtre une collection d'objets pour ce garder que ceux qui correspondent à un | |
* sous-type donné | |
* | |
* @param objets la collection d'objets | |
* @param type le type des objets à conserver | |
* @return les objets du type indiqué | |
*/ | |
public static final <T, U extends T> List<U> filter(final Collection<T> objets, | |
final Class<U> type) { | |
return objets.stream() // | |
.filter(type::isInstance) // | |
.map(type::cast) // | |
.collect(Collectors.toList() // | |
); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Get stacktrace content, whitout print it: https://stackoverflow.com/questions/1149703/how-can-i-convert-a-stack-trace-to-a-string#47979399 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment