Skip to content

Instantly share code, notes, and snippets.

@pierrefevrier
Last active August 1, 2018 08:53
Show Gist options
  • Save pierrefevrier/12f7750d784eb6874c7cc664932222ad to your computer and use it in GitHub Desktop.
Save pierrefevrier/12f7750d784eb6874c7cc664932222ad to your computer and use it in GitHub Desktop.
Java Samples
/**
* 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() //
);
}
// 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