Skip to content

Instantly share code, notes, and snippets.

@freddyb2
Last active July 2, 2025 05:30
Show Gist options
  • Save freddyb2/4d9b5574fadb16a0ac0ccee1d91d7abe to your computer and use it in GitHub Desktop.
Save freddyb2/4d9b5574fadb16a0ac0ccee1d91d7abe to your computer and use it in GitHub Desktop.

Contact Finder

Objectifs du kata

  • Utiliser les streams pour filtrer et transformer des collections.
  • Manipuler des Optional pour gérer les champs facultatifs.
  • Pratiquer des chaînes d’opérations fonctionnelles claires et robustes.

Contexte

Vous développez un petit moteur de recherche pour un gestionnaire de contacts.

Chaque contact est représenté par la classe suivante :

public class Contact {
    private String id;
    private Optional<String> firstName;
    private Optional<String> lastName;
    private Optional<String> email;
    private Optional<String> phoneNumber;
    private Optional<String> city;
    
    // constructor, etc.
}

Données d'exemple

List<Contact> contacts = List.of(
    new Contact("1", Optional.of("Alice"), Optional.of("Durand"), Optional.of("[email protected]"), Optional.of("0102030405"), Optional.of("Paris")),
    new Contact("2", Optional.empty(), Optional.of("Martin"), Optional.empty(), Optional.of("0607080910"), Optional.of("Lyon")),
    new Contact("3", Optional.of("Bob"), Optional.empty(), Optional.of("[email protected]"), Optional.empty(), Optional.empty()),
    // ...
);

What you need to do

1. Recherche simple

Implémentez :

List<Contact> searchByName(List<Contact> contacts, String query)

Elle retourne les contacts dont le prénom ou nom contient la chaîne query (insensible à la casse).

  • Filtrer uniquement les Optional présents
  • Utiliser Stream.filter, map, flatMap
  • Ne pas provoquer de NoSuchElementException

2. Trier les résultats par nom / prénom

3. Export

Implémentez :

List<String> exportToCsv(List<Contact> contacts)

Chaque ligne de CSV est du type :

"Durand,Alice,[email protected],0600000000,Toulouse"

Si une info est absente, laisser vide. Exemple :

"Martin,,,0700000000,"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment