public static <T, K, V> MutableMap<K, V> aggregateInPlaceBy(
            Iterable<T> iterable,
            Function<? super T, ? extends K> groupBy,
            Function0<? extends V> zeroValueFactory,
            Procedure2<? super V, ? super T> mutatingAggregator)
    {
        return FJIterate.aggregateInPlaceBy(
                iterable,
                groupBy,
                zeroValueFactory,
                mutatingAggregator,
                FJIterate.DEFAULT_MIN_FORK_SIZE);
    }
@Test
    public void aggregateInPlaceByWithBatchSize()
    {
        Procedure2<AtomicInteger, Integer> sumAggregator = AtomicInteger::addAndGet;
        MutableList<Integer> list = LazyIterate.adapt(Collections.nCopies(100, 1))
                .concatenate(Collections.nCopies(200, 2))
                .concatenate(Collections.nCopies(300, 3))
                .toList()
                .shuffleThis();
        MapIterable<String, AtomicInteger> aggregation =
                FJIterate.aggregateInPlaceBy(list, Functions.getToString(), ATOMIC_INTEGER_NEW, sumAggregator, 50);
        assertEquals(100, aggregation.get("1").intValue());
        assertEquals(400, aggregation.get("2").intValue());
        assertEquals(900, aggregation.get("3").intValue());
    }