From f33353572140b826fdf795ca29019bd03ad89579 Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Thu, 4 Apr 2013 05:56:18 +0000 Subject: [PATCH] joinHomogenous --- .../ability/effects/ChangeZoneEffect.java | 8 ++----- src/main/java/forge/util/Lang.java | 23 +++++++++++++++++-- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/main/java/forge/card/ability/effects/ChangeZoneEffect.java b/src/main/java/forge/card/ability/effects/ChangeZoneEffect.java index e71c092672b..8ea33b4d38e 100644 --- a/src/main/java/forge/card/ability/effects/ChangeZoneEffect.java +++ b/src/main/java/forge/card/ability/effects/ChangeZoneEffect.java @@ -29,6 +29,7 @@ import forge.game.zone.ZoneType; import forge.gui.GuiChoose; import forge.gui.GuiDialog; import forge.util.Aggregates; +import forge.util.Lang; public class ChangeZoneEffect extends SpellAbilityEffect { @Override @@ -81,12 +82,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect { fetchers.add(sa.getSourceCard().getController()); } - final StringBuilder fetcherSB = new StringBuilder(); - for (int i = 0; i < fetchers.size(); i++) { - fetcherSB.append(fetchers.get(i).getName()); - fetcherSB.append((i + 2) == fetchers.size() ? " and " : (i + 1) == fetchers.size() ? "" : ", "); - } - final String fetcherNames = fetcherSB.toString(); + final String fetcherNames = Lang.joinHomogenous(fetchers, Player.Accessors.FN_GET_NAME); // Player who chooses the cards to move List choosers = new ArrayList(); diff --git a/src/main/java/forge/util/Lang.java b/src/main/java/forge/util/Lang.java index 6bbd798026f..843c56a7d81 100644 --- a/src/main/java/forge/util/Lang.java +++ b/src/main/java/forge/util/Lang.java @@ -1,5 +1,9 @@ package forge.util; +import java.util.List; + +import com.google.common.base.Function; + /** * TODO: Write javadoc for this type. * @@ -11,7 +15,7 @@ public class Lang { * @param position * @return */ - public static Object getOrdinal(int position) { + public static String getOrdinal(int position) { String[] sufixes = new String[] { "th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th" }; switch (position % 100) { case 11: @@ -22,5 +26,20 @@ public class Lang { return position + sufixes[position % 10]; } } - + + public static String joinHomogenous(List objects) { return joinHomogenous(objects, null); } + public static String joinHomogenous(List objects, Function accessor) { + int remaining = objects.size(); + StringBuilder sb = new StringBuilder(); + for(T obj : objects) { + remaining--; + if( accessor != null ) + sb.append(accessor.apply(obj)); + else + sb.append(obj); + if( remaining > 1 ) sb.append(", "); + if( remaining == 1 ) sb.append(" and "); + } + return sb.toString(); + } }