diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 6f36ee91f2a6fb32b1dc0cddb48d08d610a617f7..2f145983079591d7c5383ce43d5fcebeedc00512 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -9,3 +9,4 @@ include:
   - local: "/gilded-rose/.gitlab-ci.yml"
   - local: "/ugly-trivia/.gitlab-ci.yml"
   - local: "/borestop/.gitlab-ci.yml"
+  - local: "/java-pagination-seven/.gitlab-ci.yml"
diff --git a/README.md b/README.md
index e05383ed43124bacd21e41a30dc0b56691fb09e8..57b4392d5b5af94ad4024be81d4acda0fe08f8b1 100644
--- a/README.md
+++ b/README.md
@@ -24,3 +24,4 @@ Ce dépôt Git a pour but de partager les différents ateliers pouvant être ré
 6. [GildedRose](/gilded-rose)
 7. [UglyTrivia](/ugly-trivia)
 8. [Borestop](/borestop)
+9. [Java pagination Seven](/java-pagination-seven)
diff --git a/java-pagination-seven/.gitlab-ci.yml b/java-pagination-seven/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..006780aeab53f69dfbb15a3fde7617871f2abd47
--- /dev/null
+++ b/java-pagination-seven/.gitlab-ci.yml
@@ -0,0 +1,11 @@
+package-java-pagination-seven:
+  variables:
+    PROJECT_FOLDER: "java-pagination-seven"
+  extends: .java
+  only:
+    refs:
+      - master
+      - merge_requests
+    changes:
+      - ".gitlab-common-ci.yml"
+      - "java-pagination-seven/**/*"
diff --git a/java-pagination-seven/README.md b/java-pagination-seven/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..9030d44d5f328d8b2b9ab3499b11885463ca4670
--- /dev/null
+++ b/java-pagination-seven/README.md
@@ -0,0 +1,9 @@
+# Java pagination Seven
+
+Résolution en TDD et en Java du kata [Pagination Seven](https://codingdojo.org/kata/PaginationSeven/).
+
+-   **Auteurs** : Julie CONTE et Colin DAMON
+-   **Date** : 08/08/2020
+-   **Langage** : Java
+-   **Niveau** : Débutant
+-   **Replay** : [Pagination Seven en Java - Julie et Colin](https://www.youtube.com/watch?v=tK7Ao9F_Dhg)
diff --git a/java-pagination-seven/pom.xml b/java-pagination-seven/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..434c14fa9d9f8d4126b883ed2840ad8960e7f249
--- /dev/null
+++ b/java-pagination-seven/pom.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <version>1.0.0</version>
+    <groupId>fr.ippon.kata</groupId>
+    <artifactId>java-parent</artifactId>
+    <relativePath>../java-parent</relativePath>
+  </parent>
+
+  <version>1.0.0-SNAPSHOT</version>
+  <artifactId>java-pagination-seven</artifactId>
+
+  <name>JavaPaginationSeven</name>
+
+  <developers>
+    <developer>
+      <email>jconte@ippon.fr</email>
+      <name>Julie CONTE</name>
+    </developer>
+    <developer>
+      <email>cdamon@ippon.fr</email>
+      <name>Colin DAMON</name>
+    </developer>
+  </developers>
+</project>
diff --git a/java-pagination-seven/src/main/java/fr/ippon/kata/pagination/Pagination.java b/java-pagination-seven/src/main/java/fr/ippon/kata/pagination/Pagination.java
new file mode 100644
index 0000000000000000000000000000000000000000..24d8dc08360dcd2863ee9c4cc500e7a230b765dd
--- /dev/null
+++ b/java-pagination-seven/src/main/java/fr/ippon/kata/pagination/Pagination.java
@@ -0,0 +1,98 @@
+package fr.ippon.kata.pagination;
+
+import java.util.function.IntFunction;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+public class Pagination {
+  private static final String SPACE = " ";
+  private static final String ELLIPSIS = " … ";
+
+  private final String representation;
+
+  private Pagination(PaginationBuilder builder) {
+    representation = buildRepresentation(builder);
+  }
+
+  private String buildRepresentation(PaginationBuilder builder) {
+    if (builder.total > 7 && builder.current > builder.total - 4) {
+      return endingEllipsis(builder);
+    }
+
+    if (builder.total <= 7) {
+      return fullPages(builder);
+    }
+
+    if (builder.current < 5) {
+      return startingEllipsis(builder);
+    }
+
+    return twoEllipsisPagination(builder);
+  }
+
+  private String endingEllipsis(PaginationBuilder builder) {
+    return "1" + ELLIPSIS + rangeRepresentation(builder.total - 4, builder.total, builder.current);
+  }
+
+  private String fullPages(PaginationBuilder builder) {
+    int end = builder.total;
+
+    return rangeRepresentation(1, end, builder.current);
+  }
+
+  private String startingEllipsis(PaginationBuilder builder) {
+    return rangeRepresentation(1, 5, builder.current) + ELLIPSIS + builder.total;
+  }
+
+  private String twoEllipsisPagination(PaginationBuilder builder) {
+    int start = builder.current - 1;
+    int end = builder.current + 1;
+
+    return "1" + ELLIPSIS + rangeRepresentation(start, end, builder.current) + ELLIPSIS + builder.total;
+  }
+
+  private String rangeRepresentation(int start, int end, int current) {
+    return IntStream.range(start, end + 1).mapToObj(toPage(current)).collect(Collectors.joining(SPACE));
+  }
+
+  private IntFunction<String> toPage(int current) {
+    return value -> {
+      if (current == value) {
+        return currentPageRepresentation(value);
+      }
+
+      return String.valueOf(value);
+    };
+  }
+
+  private String currentPageRepresentation(int value) {
+    return "(" + value + ")";
+  }
+
+  public static PaginationBuilder current(int current) {
+    return new PaginationBuilder(current);
+  }
+
+  private String display() {
+    return representation;
+  }
+
+  public static class PaginationBuilder {
+    private final int current;
+    private int total;
+
+    public PaginationBuilder(int current) {
+      this.current = current;
+    }
+
+    public PaginationBuilder total(int total) {
+      this.total = total;
+
+      return this;
+    }
+
+    public String display() {
+      return new Pagination(this).display();
+    }
+  }
+}
diff --git a/java-pagination-seven/src/test/java/fr/ippon/kata/pagination/PaginationTest.java b/java-pagination-seven/src/test/java/fr/ippon/kata/pagination/PaginationTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..1a57a1f60dc610b2e5169f88cb20216232451799
--- /dev/null
+++ b/java-pagination-seven/src/test/java/fr/ippon/kata/pagination/PaginationTest.java
@@ -0,0 +1,38 @@
+package fr.ippon.kata.pagination;
+
+import static org.assertj.core.api.Assertions.*;
+
+import org.junit.jupiter.api.Test;
+
+public class PaginationTest {
+
+  @Test
+  void shouldGetPageTwoOfFive() {
+    assertThat(Pagination.current(2).total(5).display()).isEqualTo("1 (2) 3 4 5");
+  }
+
+  @Test
+  void shouldDisplayFourtyTwoOfHundred() {
+    assertThat(Pagination.current(42).total(100).display()).isEqualTo("1 … 41 (42) 43 … 100");
+  }
+
+  @Test
+  void shouldDisplayPageTwoOfNine() {
+    assertThat(Pagination.current(2).total(9).display()).isEqualTo("1 (2) 3 4 5 … 9");
+  }
+
+  @Test
+  void shouldDisplayPageOneOfSeven() {
+    assertThat(Pagination.current(1).total(7).display()).isEqualTo("(1) 2 3 4 5 6 7");
+  }
+
+  @Test
+  void shouldDisplayPageEightOfNine() {
+    assertThat(Pagination.current(8).total(9).display()).isEqualTo("1 … 5 6 7 (8) 9");
+  }
+
+  @Test
+  void shouldDisplayPageFiveOfNine() {
+    assertThat(Pagination.current(5).total(9).display()).isEqualTo("1 … 4 (5) 6 … 9");
+  }
+}