From eda9a86d8d48758e9982cfffd470c3b38a0a4b0b Mon Sep 17 00:00:00 2001 From: Ben Culkin Date: Sat, 21 Nov 2020 23:11:43 -0500 Subject: Make dice generic Convert dice from dealing exclusively with ints, to deal with objects of arbitrary types --- .../bjc/dicelang/neodice/diepool/FixedDiePool.java | 53 +++++++++------------- 1 file changed, 22 insertions(+), 31 deletions(-) (limited to 'dice/src/main/java/bjc/dicelang/neodice/diepool/FixedDiePool.java') diff --git a/dice/src/main/java/bjc/dicelang/neodice/diepool/FixedDiePool.java b/dice/src/main/java/bjc/dicelang/neodice/diepool/FixedDiePool.java index c60b88a..a536f62 100644 --- a/dice/src/main/java/bjc/dicelang/neodice/diepool/FixedDiePool.java +++ b/dice/src/main/java/bjc/dicelang/neodice/diepool/FixedDiePool.java @@ -1,55 +1,46 @@ package bjc.dicelang.neodice.diepool; import java.util.*; +import java.util.stream.*; import bjc.dicelang.neodice.*; -public class FixedDiePool implements DiePool { - private final Die[] dice; +public class FixedDiePool implements IDiePool { + private final List> dice; - public FixedDiePool(Die[] dice) { + public FixedDiePool(List> dice) { this.dice = dice; } + + @SafeVarargs + public FixedDiePool(IDie...dice) { + this.dice = new ArrayList<>(dice.length); + for (IDie die : dice) { + this.dice.add(die); + } + } @Override - public int[] roll(Random rng) { - int[] results = new int[dice.length]; - - for (int index = 0; index < dice.length; index++) { - results[index] = dice[index].roll(rng); - } - - return results; + public Stream roll(Random rng) { + return dice.stream().map((die) -> die.roll(rng)); } @Override - public Die[] contained() { + public List> contained() { return dice; } @Override public String toString() { - StringBuilder builder = new StringBuilder(); - - for (int i = 0; i < dice.length; i++) { - Die die = dice[i]; - - builder.append(die); - - // Don't add an extra trailing comma - if (i < dice.length - 1) builder.append(", "); - } - - return builder.toString(); + return dice.stream() + .map(IDie::toString) + .collect(Collectors.joining(", ")); } @Override public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + Arrays.hashCode(dice); - return result; + return Objects.hash(dice); } @Override @@ -57,9 +48,9 @@ public class FixedDiePool implements DiePool { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; + + FixedDiePool other = (FixedDiePool) obj; - FixedDiePool other = (FixedDiePool) obj; - - return Arrays.equals(dice, other.dice); + return Objects.equals(dice, other.dice); } } \ No newline at end of file -- cgit v1.2.3