From fb46e2e04b034c6946cb937d7b1223f80c75d1fc Mon Sep 17 00:00:00 2001 From: "Glen K. Peterson" Date: Thu, 11 Jun 2015 12:41:18 -0400 Subject: [PATCH] Added more stuff for presentation. --- presentation.pptx | Bin 61189 -> 120550 bytes src/test/java/EasyCollectionsTest.java | 112 +++++++++++++++++-------- 2 files changed, 76 insertions(+), 36 deletions(-) diff --git a/presentation.pptx b/presentation.pptx index 6c0923ec706f7672f1f3048c251a0c91f7001cc4..b90c7e9ee6130cb7eee76b4321250714ba8f0d2e 100644 GIT binary patch delta 37737 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 M$Pf^b>reOpA7s_5=l}o! diff --git a/src/test/java/EasyCollectionsTest.java b/src/test/java/EasyCollectionsTest.java index 73c1cd9..edf9442 100644 --- a/src/test/java/EasyCollectionsTest.java +++ b/src/test/java/EasyCollectionsTest.java @@ -14,14 +14,18 @@ import org.junit.Test; import org.organicdesign.fp.collections.ImList; -import org.organicdesign.fp.collections.ImMapOrdered; -import org.organicdesign.fp.collections.PersistentTreeMap; +import org.organicdesign.fp.collections.ImMap; +import org.organicdesign.fp.collections.PersistentHashMap; import org.organicdesign.fp.collections.PersistentVector; import org.organicdesign.fp.collections.UnMap.UnEntry; import org.organicdesign.fp.tuple.Tuple2; -import java.awt.*; -import java.util.Comparator; +import java.awt.Color; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; @@ -91,55 +95,91 @@ public class EasyCollectionsTest { public static void println(Object s) { System.out.println(String.valueOf(s)); } - public static Comparator COLOR_COMP = - (a, b) -> (a.getRed() + a.getGreen() + a.getBlue()) - (b.getRed() + b.getGreen() + b.getBlue()); +// public static Comparator COLOR_COMP = +// (a, b) -> (a.getRed() + a.getGreen() + a.getBlue()) - (b.getRed() + b.getGreen() + b.getBlue()); + +// public static T ex(T t) throws IOException { return t; } @Test public void colorSquare() { ImList imgData = PersistentVector.empty(); for (int i = 0; i < 256; i++) { for (int j = 0; j < 256; j++) { - imgData = imgData.append(new Color(i, j, 255)); + imgData = imgData.append(new Color(i, (i + j) / 2, 255)); } } println("imgData: " + imgData); - ImMapOrdered counts = imgData - .foldLeft(PersistentTreeMap.ofComp(COLOR_COMP), + ImMap counts = imgData + .foldLeft(PersistentHashMap.empty(), (accum, c) -> accum.assoc(c, accum.getOrElse(c, 0) + 1)); println("counts: " + counts); - UnEntry mostPopularColor = counts + UnEntry mostPopularColor = counts.seq() .foldLeft((UnEntry) Tuple2.of((Color) null, 0), - (max, entry) -> - (entry.getValue() > max.getValue()) ? entry : max); + (max, entry) -> (entry.getValue() > max.getValue()) ? entry : max); println("mostPopularColor: " + mostPopularColor); println("number of unique colors: " + counts.size()); } -// // TODO: Shows bug in PersistentHashMap (see counts.toString()) -// @Test public void colorSquare2() { -// ImList imgData = PersistentVector.empty(); -// for (int i = 0; i < 256; i++) { -// for (int j = 0; j < 256; j++) { -// imgData = imgData.append(new Color(i, j, 255)); -// } -// } -// println("imgData: " + imgData); -// -// ImMap counts = imgData -// .foldLeft(PersistentHashMap.empty(), -// (accum, c) -> accum.assoc(c, accum.getOrElse(c, 0) + 1)); -// -// println("counts: " + counts); -// -// UnEntry mostPopularColor = counts.seq() -// .foldLeft((UnEntry) Tuple2.of((Color) null, 0), -// (max, entry) -> -// (entry.getValue() > max.getValue()) ? entry : max); -// -// println("mostPopularColor: " + mostPopularColor); -// println("number of unique colors: " + counts.size()); -// } + @Test public void colorSquare2() { + List imgData = new ArrayList<>(); + for (int i = 0; i < 256; i++) { + for (int j = 0; j < 256; j++) { + imgData.add(new Color(i, (i + j) / 2, 255)); + } + } + println("imgData: " + imgData.toString().substring(0, 50)); + + Map counts = new HashMap<>(); + for (Color c : imgData) { + counts.put(c, counts.getOrDefault(c, 0) + 1); + } + + println("counts: " + counts.toString().substring(0, 50)); + + Map.Entry max = Tuple2.of((Color) null, 0); + for (Map.Entry entry : counts.entrySet()) { + if (entry.getValue() > max.getValue()) { + max = entry; + } + } + + println("mostPopularColor: " + max); + println("number of unique colors: " + counts.size()); + } + + @Test public void colorSquare3() { + List imgData = new ArrayList<>(); + for (int i = 0; i < 256; i++) { + for (int j = 0; j < 256; j++) { + imgData.add(new Color(i, (i + j) / 2, 255)); + } + } + println("imgData: " + imgData.toString().substring(0, 50)); + + Map counts = imgData.stream() + .reduce(new HashMap<>(), + (HashMap accum, Color c) -> { + accum.put(c, accum.getOrDefault(c, 0) + 1); + return accum; + }, + (HashMap accum1, HashMap accum2) -> { + for (Map.Entry e : accum2.entrySet()) { + Color key = e.getKey(); + accum1.put(key, accum1.getOrDefault(key, 0) + e.getValue()); + } + return accum1; + }); + + println("counts: " + counts.toString().substring(0, 50)); + + Optional> mostPopularColor = counts.entrySet().stream().max((e1, e2) -> e1.getValue() - e2.getValue()); + + println("mostPopularColor: " + mostPopularColor.get()); + println("number of unique colors: " + counts.size()); + } + + }