diff --git a/src/main/java/io/takima/Yatzy.java b/src/main/java/io/takima/Yatzy.java
index 6150c2f13fb5f252d38b69af382881bc09e02cd1..00c52d143eb34ce8ad9ff06c918b064a9d6d967d 100644
--- a/src/main/java/io/takima/Yatzy.java
+++ b/src/main/java/io/takima/Yatzy.java
@@ -103,35 +103,14 @@ public final class Yatzy {
         return 0;
     }
 
-    public static int fullHouse(int d1, int d2, int d3, int d4, int d5) {
-        boolean hasPair = false;
-        int pairValue = 0;
-        boolean hasTriplet = false;
-        int tripletValue = 0;
-
-
-        int[] counts = new int[6];
-        counts[d1 - 1] += 1;
-        counts[d2 - 1] += 1;
-        counts[d3 - 1] += 1;
-        counts[d4 - 1] += 1;
-        counts[d5 - 1] += 1;
-
-        for (int i = 0; i != 6; i += 1)
-            if (counts[i] == 2) {
-                hasPair = true;
-                pairValue = i + 1;
-            }
-
-        for (int i = 0; i != 6; i += 1)
-            if (counts[i] == 3) {
-                hasTriplet = true;
-                tripletValue = i + 1;
-            }
-
-        if (hasPair && hasTriplet)
-            return pairValue * 2 + tripletValue * 3;
-        else
+    public static int fullHouse(Roll roll) {
+        List<Integer> fullHouseSearch = roll.countByDiceValueStream()
+            .filter(entry -> entry.getValue() == 2 || entry.getValue() == 3)
+            .map(entry -> entry.getKey() * entry.getValue().intValue())
+            .toList();
+        if (fullHouseSearch.size() != 2) {
             return 0;
+        }
+        return fullHouseSearch.get(0) + fullHouseSearch.get(1);
     }
 }
diff --git a/src/test/java/io/takima/YatzyTest.java b/src/test/java/io/takima/YatzyTest.java
index 45b0ff70aad72846431351969dc1dd923de6c81c..da9214f60fd094d62cb2011169b789d3ec4ed009 100644
--- a/src/test/java/io/takima/YatzyTest.java
+++ b/src/test/java/io/takima/YatzyTest.java
@@ -166,11 +166,11 @@ class YatzyTest {
 
     @Test
     void fullHouseShouldSumDicesIfThereAreATripletAndAPair() {
-        assertEquals(18, Yatzy.fullHouse(6, 2, 2, 2, 6));
+        assertEquals(18, Yatzy.fullHouse(roll(6, 2, 2, 2, 6)));
     }
 
     @Test
     void fullHouseShouldReturnZeroIfThereIsNotTripletAndPair() {
-        assertEquals(0, Yatzy.fullHouse(2, 3, 4, 5, 6));
+        assertEquals(0, Yatzy.fullHouse(roll(2, 3, 4, 5, 6)));
     }
 }