diff --git a/src/main/java/io/takima/Yatzy.java b/src/main/java/io/takima/Yatzy.java
index 20a86b0d074fd44cd92832266b2b68775c004138..54a0a2186838fa097f37c74617a2f6bc9ef22d6f 100644
--- a/src/main/java/io/takima/Yatzy.java
+++ b/src/main/java/io/takima/Yatzy.java
@@ -1,5 +1,6 @@
 package io.takima;
 
+import java.util.List;
 import java.util.Map;
 
 public final class Yatzy {
@@ -54,26 +55,15 @@ public final class Yatzy {
             .orElse(0);
     }
 
-    public static int twoPair(int d1, int d2, int d3, int d4, int d5) {
-        int[] counts = new int[6];
-        counts[d1 - 1]++;
-        counts[d2 - 1]++;
-        counts[d3 - 1]++;
-        counts[d4 - 1]++;
-        counts[d5 - 1]++;
-        int n = 0;
-        int score = 0;
-        for (int i = 0; i < 6; i += 1) {
-            if (counts[6 - i - 1] >= 2) {
-                n++;
-                score += (6 - i);
-            }
-        }
-        if (n == 2) {
-            return score * 2;
-        } else {
+    public static int twoPair(Roll roll) {
+        List<Integer> pairs = roll.countByDiceValueStream()
+            .filter(entry -> entry.getValue() >= 2)
+            .map(entry -> entry.getKey() * 2)
+            .toList();
+        if (pairs.size() != 2) {
             return 0;
         }
+        return pairs.get(0) + pairs.get(1);
     }
 
     public static int fourOfAKind(int d1, int d2, int d3, int d4, int d5) {
diff --git a/src/test/java/io/takima/YatzyTest.java b/src/test/java/io/takima/YatzyTest.java
index dd3857e8beabb9aa79705a1d8d92afa31829ff19..b663f692a4d1ccaad7e91c655252e19d51308a3d 100644
--- a/src/test/java/io/takima/YatzyTest.java
+++ b/src/test/java/io/takima/YatzyTest.java
@@ -93,14 +93,14 @@ class YatzyTest {
     @Test
     void twoPairShouldSumTheScoreOfAllDiceWhichMatchWithDistinctPair() {
         assertAll(
-            () -> assertEquals(16, Yatzy.twoPair(3, 3, 5, 4, 5)),
-            () -> assertEquals(16, Yatzy.twoPair(3, 3, 5, 5, 5))
+            () -> assertEquals(16, Yatzy.twoPair(roll(3, 3, 5, 4, 5))),
+            () -> assertEquals(16, Yatzy.twoPair(roll(3, 3, 5, 5, 5)))
         );
     }
 
     @Test
     void twoPairShouldMatchIfThereIsTwoDistinctPair() {
-        assertEquals(0, Yatzy.twoPair(3, 3, 3, 3, 1));
+        assertEquals(0, Yatzy.twoPair(roll(3, 3, 3, 3, 1)));
     }
 
     @Test