Skip to content

Commit 47696a9

Browse files
committed
Improve $.groupBy(function, binaryOperator) method for chain.
1 parent b4f79a5 commit 47696a9

File tree

3 files changed

+20
-16
lines changed

3 files changed

+20
-16
lines changed

src/main/java/com/github/underscore/$.java

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -807,23 +807,11 @@ public <K, E> Map<K, List<E>> groupBy(final Function<E, K> func) {
807807

808808
public static <K, E> Map<K, Optional<E>> groupBy(final Iterable<E> iterable, final Function<E, K> func,
809809
final BinaryOperator<E> binaryOperator) {
810-
final Map<K, List<E>> retVal = newLinkedHashMap();
811-
for (E e : iterable) {
812-
final K key = func.apply(e);
813-
List<E> val;
814-
if (retVal.containsKey(key)) {
815-
val = retVal.get(key);
816-
} else {
817-
val = newArrayList();
818-
}
819-
val.add(e);
820-
retVal.put(key, val);
821-
}
822-
final Map<K, Optional<E>> retVal2 = newLinkedHashMap();
823-
for (Map.Entry<K, List<E>> entry : retVal.entrySet()) {
824-
retVal2.put(entry.getKey(), reduce(entry.getValue(), binaryOperator));
810+
final Map<K, Optional<E>> retVal = newLinkedHashMap();
811+
for (Map.Entry<K, List<E>> entry : groupBy(iterable, func).entrySet()) {
812+
retVal.put(entry.getKey(), reduce(entry.getValue(), binaryOperator));
825813
}
826-
return retVal2;
814+
return retVal;
827815
}
828816

829817
@SuppressWarnings("unchecked")

src/main/java/com/github/underscore/lodash/$.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,11 @@ public <F> Chain<Map<F, List<T>>> groupBy(final Function<T, F> func) {
251251
return new Chain<Map<F, List<T>>>($.groupBy(value(), func));
252252
}
253253

254+
public <F> Chain<Map<F, Optional<T>>> groupBy(final Function<T, F> func,
255+
final BinaryOperator<T> binaryOperator) {
256+
return new Chain<Map<F, Optional<T>>>($.groupBy(value(), func, binaryOperator));
257+
}
258+
254259
public Chain<Map<Object, List<T>>> indexBy(final String property) {
255260
return new Chain<Map<Object, List<T>>>($.indexBy(value(), property));
256261
}

src/test/java/com/github/underscore/lodash/LodashTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -642,6 +642,17 @@ public void chain() {
642642
$.chain(new LinkedHashMap<Integer, Integer>().entrySet()).sortBy("");
643643
$.chain(new Integer[] {0}).groupBy(new Function<Integer, Integer>() {
644644
public Integer apply(Integer value) { return value; } });
645+
$.chain(new Integer[] {0}).groupBy(
646+
new Function<Integer, Integer>() {
647+
public Integer apply(Integer num) {
648+
return num;
649+
}
650+
},
651+
new BinaryOperator<Integer>() {
652+
public Integer apply(Integer a, Integer b) {
653+
return a;
654+
}
655+
});
645656
$.chain(new Integer[] {0}).indexBy("");
646657
$.chain(new Integer[] {0}).countBy(new Function<Integer, Integer>() {
647658
public Integer apply(Integer value) { return value; } });

0 commit comments

Comments
 (0)