Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.landawn.abacus.util.stream.Collectors Maven / Gradle / Ivy
Go to download
A general programming library in Java/Android. It's easy to learn and simple to use with concise and powerful APIs.
/*
* Copyright (C) 2016, 2017, 2018, 2019 HaiYang Li
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package com.landawn.abacus.util.stream;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.ConcurrentModificationException;
import java.util.Deque;
import java.util.EnumSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Queue;
import java.util.Set;
import java.util.concurrent.ConcurrentMap;
import java.util.function.BiConsumer;
import java.util.function.BiFunction;
import java.util.function.BinaryOperator;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.IntFunction;
import java.util.function.Predicate;
import java.util.function.Supplier;
import java.util.function.ToDoubleFunction;
import java.util.function.ToIntFunction;
import java.util.function.ToLongFunction;
import java.util.stream.Collector;
import java.util.stream.Collector.Characteristics;
import com.landawn.abacus.exception.TooManyElementsException;
import com.landawn.abacus.util.Array;
import com.landawn.abacus.util.BiMap;
import com.landawn.abacus.util.BigDecimalSummaryStatistics;
import com.landawn.abacus.util.BigIntegerSummaryStatistics;
import com.landawn.abacus.util.BooleanList;
import com.landawn.abacus.util.ByteList;
import com.landawn.abacus.util.ByteSummaryStatistics;
import com.landawn.abacus.util.CharList;
import com.landawn.abacus.util.CharSummaryStatistics;
import com.landawn.abacus.util.Comparators;
import com.landawn.abacus.util.DataSet;
import com.landawn.abacus.util.DoubleList;
import com.landawn.abacus.util.DoubleSummaryStatistics;
import com.landawn.abacus.util.FloatList;
import com.landawn.abacus.util.FloatSummaryStatistics;
import com.landawn.abacus.util.Fn;
import com.landawn.abacus.util.Fn.BiConsumers;
import com.landawn.abacus.util.Fn.BinaryOperators;
import com.landawn.abacus.util.Fn.Suppliers;
import com.landawn.abacus.util.Holder;
import com.landawn.abacus.util.ImmutableList;
import com.landawn.abacus.util.ImmutableMap;
import com.landawn.abacus.util.ImmutableSet;
import com.landawn.abacus.util.IntList;
import com.landawn.abacus.util.IntSummaryStatistics;
import com.landawn.abacus.util.Joiner;
import com.landawn.abacus.util.KahanSummation;
import com.landawn.abacus.util.ListMultimap;
import com.landawn.abacus.util.LongList;
import com.landawn.abacus.util.LongMultiset;
import com.landawn.abacus.util.LongSummaryStatistics;
import com.landawn.abacus.util.Multimap;
import com.landawn.abacus.util.Multiset;
import com.landawn.abacus.util.MutableBoolean;
import com.landawn.abacus.util.N;
import com.landawn.abacus.util.ObjIterator;
import com.landawn.abacus.util.Pair;
import com.landawn.abacus.util.ShortList;
import com.landawn.abacus.util.ShortSummaryStatistics;
import com.landawn.abacus.util.Tuple;
import com.landawn.abacus.util.Tuple.Tuple2;
import com.landawn.abacus.util.Tuple.Tuple3;
import com.landawn.abacus.util.Tuple.Tuple4;
import com.landawn.abacus.util.Tuple.Tuple5;
import com.landawn.abacus.util.Tuple.Tuple6;
import com.landawn.abacus.util.Tuple.Tuple7;
import com.landawn.abacus.util.u.Optional;
import com.landawn.abacus.util.u.OptionalDouble;
import com.landawn.abacus.util.function.ToByteFunction;
import com.landawn.abacus.util.function.ToCharFunction;
import com.landawn.abacus.util.function.ToFloatFunction;
import com.landawn.abacus.util.function.ToShortFunction;
import com.landawn.abacus.util.function.TriFunction;
/**
*
* @see {@code java.util.stream.Collectors}
*
*/
public abstract class Collectors {
static final Object NONE = new Object(); //NOSONAR
/**
* @deprecated
*/
@Deprecated
static final Set CH_CONCURRENT_ID = Collections
.unmodifiableSet(EnumSet.of(Characteristics.CONCURRENT, Characteristics.UNORDERED, Characteristics.IDENTITY_FINISH));
/**
* @deprecated
*/
@Deprecated
static final Set CH_CONCURRENT_NOID = Collections.unmodifiableSet(EnumSet.of(Characteristics.CONCURRENT, Characteristics.UNORDERED));
static final Set CH_UNORDERED_ID = Collections.unmodifiableSet(EnumSet.of(Characteristics.UNORDERED, Characteristics.IDENTITY_FINISH));
static final Set CH_UNORDERED_NOID = Collections.unmodifiableSet(EnumSet.of(Characteristics.UNORDERED));
static final Set CH_ID = Collections.unmodifiableSet(EnumSet.of(Characteristics.IDENTITY_FINISH));
static final Set CH_NOID = Collections.emptySet();
// ============================================================================================================
@SuppressWarnings("deprecation")
static final Function, ImmutableList> ImmutableList_Finisher = ImmutableList::wrap;
@SuppressWarnings("deprecation")
static final Function, ImmutableSet> ImmutableSet_Finisher = ImmutableSet::wrap;
@SuppressWarnings("deprecation")
static final Function, ImmutableMap> ImmutableMap_Finisher = ImmutableMap::wrap;
static final BiConsumer, Object> Multiset_Accumulator = Multiset::add;
static final BinaryOperator> Multiset_Combiner = (a, b) -> {
a.addAll(b);
return a;
};
static final BiConsumer, Object> LongMultiset_Accumulator = LongMultiset::add;
static final BinaryOperator> LongMultiset_Combiner = (a, b) -> {
a.addAll(b);
return a;
};
static final BiConsumer BooleanList_Accumulator = BooleanList::add;
static final BinaryOperator BooleanList_Combiner = (a, b) -> {
a.addAll(b);
return a;
};
static final Function BooleanArray_Finisher = t -> t.trimToSize().array();
static final BiConsumer CharList_Accumulator = CharList::add;
static final BinaryOperator CharList_Combiner = (a, b) -> {
a.addAll(b);
return a;
};
static final Function CharArray_Finisher = t -> t.trimToSize().array();
static final BiConsumer ByteList_Accumulator = ByteList::add;
static final BinaryOperator ByteList_Combiner = (a, b) -> {
if (a.size() >= b.size()) {
a.addAll(b);
return a;
} else {
b.addAll(a);
return b;
}
};
static final Function ByteArray_Finisher = t -> t.trimToSize().array();
static final BiConsumer ShortList_Accumulator = ShortList::add;
static final BinaryOperator ShortList_Combiner = (a, b) -> {
if (a.size() >= b.size()) {
a.addAll(b);
return a;
} else {
b.addAll(a);
return b;
}
};
static final Function ShortArray_Finisher = t -> t.trimToSize().array();
static final BiConsumer IntList_Accumulator = IntList::add;
static final BinaryOperator IntList_Combiner = (a, b) -> {
if (a.size() >= b.size()) {
a.addAll(b);
return a;
} else {
b.addAll(a);
return b;
}
};
static final Function IntArray_Finisher = t -> t.trimToSize().array();
static final BiConsumer LongList_Accumulator = LongList::add;
static final BinaryOperator LongList_Combiner = (a, b) -> {
if (a.size() >= b.size()) {
a.addAll(b);
return a;
} else {
b.addAll(a);
return b;
}
};
static final Function LongArray_Finisher = t -> t.trimToSize().array();
static final BiConsumer FloatList_Accumulator = FloatList::add;
static final BinaryOperator FloatList_Combiner = (a, b) -> {
if (a.size() >= b.size()) {
a.addAll(b);
return a;
} else {
b.addAll(a);
return b;
}
};
static final Function FloatArray_Finisher = t -> t.trimToSize().array();
static final BiConsumer DoubleList_Accumulator = DoubleList::add;
static final BinaryOperator DoubleList_Combiner = (a, b) -> {
if (a.size() >= b.size()) {
a.addAll(b);
return a;
} else {
b.addAll(a);
return b;
}
};
static final Function DoubleArray_Finisher = t -> t.trimToSize().array();
static final BiConsumer Joiner_Accumulator = Joiner::append;
static final BinaryOperator Joiner_Combiner = (a, b) -> {
if (a.length() > b.length()) {
a.merge(b);
b.close();
return a;
} else {
b.merge(a);
a.close();
return b;
}
};
static final Function Joiner_Finisher = Joiner::toString;
static final Function Counting_Accumulator = t -> 1L;
static final BinaryOperator Counting_Combiner = (a, b) -> a.longValue() + b.longValue();
static final Function CountingInt_Accumulator = t -> 1;
static final BinaryOperator CountingInt_Combiner = (a, b) -> a.intValue() + b.intValue();
static final Supplier SummingInt_Supplier = () -> new long[1];
static final Supplier SummingInt_Supplier_2 = () -> new long[2];
static final Supplier SummingInt_Supplier_3 = () -> new long[3];
static final BinaryOperator SummingInt_Combiner = (a, b) -> {
a[0] += b[0];
return a;
};
static final BinaryOperator SummingInt_Combiner_2 = (a, b) -> {
a[0] += b[0];
a[1] += b[1];
return a;
};
static final BinaryOperator SummingInt_Combiner_3 = (a, b) -> {
a[0] += b[0];
a[1] += b[1];
a[2] += b[2];
return a;
};
static final Function SummingInt_Finisher = a -> a[0];
static final Function> SummingInt_Finisher_2 = a -> Tuple.of(a[0], a[1]);
static final Function> SummingInt_Finisher_3 = a -> Tuple.of(a[0], a[1], a[2]);
static final Supplier SummingLong_Supplier = () -> new long[1];
static final Supplier SummingLong_Supplier_2 = () -> new long[2];
static final Supplier SummingLong_Supplier_3 = () -> new long[3];
static final BinaryOperator SummingLong_Combiner = (a, b) -> {
a[0] += b[0];
return a;
};
static final BinaryOperator SummingLong_Combiner_2 = (a, b) -> {
a[0] += b[0];
a[1] += b[1];
return a;
};
static final BinaryOperator SummingLong_Combiner_3 = (a, b) -> {
a[0] += b[0];
a[1] += b[1];
a[2] += b[2];
return a;
};
static final Function SummingLong_Finisher = a -> a[0];
static final Function> SummingLong_Finisher_2 = a -> Tuple.of(a[0], a[1]);
static final Function> SummingLong_Finisher_3 = a -> Tuple.of(a[0], a[1], a[2]);
static final Supplier SummingDouble_Supplier = KahanSummation::new;
static final Supplier SummingDouble_Supplier_2 = () -> new KahanSummation[] { new KahanSummation(), new KahanSummation() };
static final Supplier SummingDouble_Supplier_3 = () -> new KahanSummation[] { new KahanSummation(), new KahanSummation(),
new KahanSummation() };
static final BinaryOperator SummingDouble_Combiner = (a, b) -> {
a.combine(b);
return a;
};
static final BinaryOperator SummingDouble_Combiner_2 = (a, b) -> {
a[0].combine(b[0]);
a[1].combine(b[1]);
return a;
};
static final BinaryOperator SummingDouble_Combiner_3 = (a, b) -> {
a[0].combine(b[0]);
a[1].combine(b[1]);
a[2].combine(b[2]);
return a;
};
static final Function SummingDouble_Finisher = KahanSummation::sum;
static final Function> SummingDouble_Finisher_2 = a -> Tuple.of(a[0].sum(), a[1].sum());
static final Function> SummingDouble_Finisher_3 = a -> Tuple.of(a[0].sum(), a[1].sum(), a[2].sum());
static final Supplier SummingBigInteger_Supplier = () -> new BigInteger[] { BigInteger.ZERO };
static final Supplier SummingBigInteger_Supplier_2 = () -> new BigInteger[] { BigInteger.ZERO, BigInteger.ZERO };
static final Supplier SummingBigInteger_Supplier_3 = () -> new BigInteger[] { BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO };
static final BinaryOperator SummingBigInteger_Combiner = (a, b) -> {
a[0] = a[0].add(b[0]);
return a;
};
static final BinaryOperator SummingBigInteger_Combiner_2 = (a, b) -> {
a[0] = a[0].add(b[0]);
a[1] = a[1].add(b[1]);
return a;
};
static final BinaryOperator SummingBigInteger_Combiner_3 = (a, b) -> {
a[0] = a[0].add(b[0]);
a[1] = a[1].add(b[1]);
a[2] = a[2].add(b[2]);
return a;
};
static final Function SummingBigInteger_Finisher = a -> a[0];
static final Function> SummingBigInteger_Finisher_2 = a -> Tuple.of(a[0], a[1]);
static final Function> SummingBigInteger_Finisher_3 = a -> Tuple.of(a[0], a[1], a[2]);
static final Supplier SummingBigDecimal_Supplier = () -> new BigDecimal[] { BigDecimal.ZERO };
static final Supplier SummingBigDecimal_Supplier_2 = () -> new BigDecimal[] { BigDecimal.ZERO, BigDecimal.ZERO };
static final Supplier SummingBigDecimal_Supplier_3 = () -> new BigDecimal[] { BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO };
static final BinaryOperator SummingBigDecimal_Combiner = (a, b) -> {
a[0] = a[0].add(b[0]);
return a;
};
static final BinaryOperator SummingBigDecimal_Combiner_2 = (a, b) -> {
a[0] = a[0].add(b[0]);
a[1] = a[1].add(b[1]);
return a;
};
static final BinaryOperator SummingBigDecimal_Combiner_3 = (a, b) -> {
a[0] = a[0].add(b[0]);
a[1] = a[1].add(b[1]);
a[2] = a[2].add(b[2]);
return a;
};
static final Function SummingBigDecimal_Finisher = a -> a[0];
static final Function> SummingBigDecimal_Finisher_2 = a -> Tuple.of(a[0], a[1]);
static final Function> SummingBigDecimal_Finisher_3 = a -> Tuple.of(a[0], a[1], a[2]);
static final Supplier AveragingInt_Supplier = () -> new long[2];
static final Supplier> AveragingInt_Supplier_2 = () -> Pair.of(new long[2], new long[2]);
static final Supplier> AveragingInt_Supplier_3 = () -> Pair.of(new long[3], new long[3]);
static final BinaryOperator AveragingInt_Combiner = (a, b) -> {
a[0] += b[0];
a[1] += b[1];
return a;
};
static final BinaryOperator> AveragingInt_Combiner_2 = (a, b) -> {
a.left[0] += b.left[0];
a.left[1] += b.left[1];
a.right[0] += b.right[0];
a.right[1] += b.right[1];
return a;
};
static final BinaryOperator> AveragingInt_Combiner_3 = (a, b) -> {
a.left[0] += b.left[0];
a.left[1] += b.left[1];
a.left[2] += b.left[2];
a.right[0] += b.right[0];
a.right[1] += b.right[1];
a.right[2] += b.right[2];
return a;
};
static final Function AveragingInt_Finisher = a -> {
if (a[1] == 0) {
throw new NoSuchElementException();
}
return ((double) a[0]) / a[1];
};
static final Function AveragingInt_Finisher_op = a -> {
if (a[1] == 0) {
return OptionalDouble.empty();
} else {
return OptionalDouble.of(((double) a[0]) / a[1]);
}
};
static final Function, Tuple2> AveragingInt_Finisher_2 = a -> {
if (a.right[0] == 0 || a.right[1] == 0) {
throw new NoSuchElementException();
}
return Tuple2.of(((double) a.left[0]) / a.right[0], ((double) a.left[1]) / a.right[1]);
};
static final Function, Tuple3> AveragingInt_Finisher_3 = a -> {
if (a.right[0] == 0 || a.right[1] == 0 || a.right[2] == 0) {
throw new NoSuchElementException();
}
return Tuple2.of(((double) a.left[0]) / a.right[0], ((double) a.left[1]) / a.right[1], ((double) a.left[2]) / a.right[2]);
};
static final Supplier AveragingLong_Supplier = () -> new long[2];
static final Supplier> AveragingLong_Supplier_2 = () -> Pair.of(new long[2], new long[2]);
static final Supplier> AveragingLong_Supplier_3 = () -> Pair.of(new long[3], new long[3]);
static final BinaryOperator AveragingLong_Combiner = (a, b) -> {
a[0] += b[0];
a[1] += b[1];
return a;
};
static final BinaryOperator> AveragingLong_Combiner_2 = (a, b) -> {
a.left[0] += b.left[0];
a.left[1] += b.left[1];
a.right[0] += b.right[0];
a.right[1] += b.right[1];
return a;
};
static final BinaryOperator> AveragingLong_Combiner_3 = (a, b) -> {
a.left[0] += b.left[0];
a.left[1] += b.left[1];
a.left[2] += b.left[2];
a.right[0] += b.right[0];
a.right[1] += b.right[1];
a.right[2] += b.right[2];
return a;
};
static final Function AveragingLong_Finisher = a -> {
if (a[1] == 0) {
throw new NoSuchElementException();
}
return ((double) a[0]) / a[1];
};
static final Function AveragingLong_Finisher_op = a -> {
if (a[1] == 0) {
return OptionalDouble.empty();
} else {
return OptionalDouble.of(((double) a[0]) / a[1]);
}
};
static final Function, Tuple2> AveragingLong_Finisher_2 = a -> {
if (a.right[0] == 0 || a.right[1] == 0) {
throw new NoSuchElementException();
}
return Tuple2.of(((double) a.left[0]) / a.right[0], ((double) a.left[1]) / a.right[1]);
};
static final Function, Tuple3> AveragingLong_Finisher_3 = a -> {
if (a.right[0] == 0 || a.right[1] == 0 || a.right[2] == 0) {
throw new NoSuchElementException();
}
return Tuple2.of(((double) a.left[0]) / a.right[0], ((double) a.left[1]) / a.right[1], ((double) a.left[2]) / a.right[2]);
};
static final Supplier AveragingDouble_Supplier = KahanSummation::new;
static final Supplier AveragingDouble_Supplier_2 = () -> new KahanSummation[] { new KahanSummation(), new KahanSummation() };
static final Supplier AveragingDouble_Supplier_3 = () -> new KahanSummation[] { new KahanSummation(), new KahanSummation(),
new KahanSummation() };
static final BinaryOperator AveragingDouble_Combiner = (a, b) -> {
a.combine(b);
return a;
};
static final BinaryOperator AveragingDouble_Combiner_2 = (a, b) -> {
a[0].combine(b[0]);
a[1].combine(b[1]);
return a;
};
static final BinaryOperator AveragingDouble_Combiner_3 = (a, b) -> {
a[0].combine(b[0]);
a[1].combine(b[1]);
a[2].combine(b[2]);
return a;
};
static final Function AveragingDouble_Finisher = a -> {
if (a.count() == 0) {
throw new NoSuchElementException();
}
return a.average().get();
};
static final Function AveragingDouble_Finisher_op = KahanSummation::average;
static final Function> AveragingDouble_Finisher_2 = a -> {
if (a[0].count() == 0 || a[1].count() == 0) {
throw new NoSuchElementException();
}
return Tuple.of(a[0].average().get(), a[1].average().get());
};
static final Function> AveragingDouble_Finisher_3 = a -> {
if (a[0].count() == 0 || a[1].count() == 0 || a[2].count() == 0) {
throw new NoSuchElementException();
}
return Tuple.of(a[0].average().get(), a[1].average().get(), a[2].average().get());
};
static final Supplier> AveragingBigInteger_Supplier = () -> Pair.of(BigInteger.ZERO, new long[1]);
static final Supplier> AveragingBigInteger_Supplier_2 = () -> Pair.of(new BigInteger[] { BigInteger.ZERO, BigInteger.ZERO },
new long[2]);
static final Supplier> AveragingBigInteger_Supplier_3 = () -> Pair
.of(new BigInteger[] { BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO }, new long[3]);
static final BinaryOperator> AveragingBigInteger_Combiner = (a, b) -> {
a.setLeft(a.left.add(b.left));
a.right[0] += b.right[0];
return a;
};
static final BinaryOperator> AveragingBigInteger_Combiner_2 = (a, b) -> {
a.left[0] = a.left[0].add(b.left[0]);
a.left[1] = a.left[1].add(b.left[1]);
a.right[0] += b.right[0];
a.right[1] += b.right[1];
return a;
};
static final BinaryOperator> AveragingBigInteger_Combiner_3 = (a, b) -> {
a.left[0] = a.left[0].add(b.left[0]);
a.left[1] = a.left[1].add(b.left[1]);
a.left[2] = a.left[2].add(b.left[2]);
a.right[0] += b.right[0];
a.right[1] += b.right[1];
a.right[2] += b.right[2];
return a;
};
static final Function, BigDecimal> AveragingBigInteger_Finisher = a -> {
if (a.right[0] == 0) {
throw new NoSuchElementException();
}
return new BigDecimal(a.left).divide(new BigDecimal(a.right[0]));
};
static final Function, Optional> AveragingBigInteger_Finisher_op = a -> a.right[0] == 0 ? Optional. empty()
: Optional.of(new BigDecimal(a.left).divide(new BigDecimal(a.right[0])));
static final Function, Tuple2> AveragingBigInteger_Finisher_2 = a -> {
if (a.right[0] == 0 || a.right[1] == 0) {
throw new NoSuchElementException();
}
return Tuple.of(new BigDecimal(a.left[0]).divide(new BigDecimal(a.right[0])), new BigDecimal(a.left[1]).divide(new BigDecimal(a.right[1])));
};
static final Function, Tuple3> AveragingBigInteger_Finisher_3 = a -> {
if (a.right[0] == 0 || a.right[1] == 0 || a.right[2] == 0) {
throw new NoSuchElementException();
}
return Tuple.of(new BigDecimal(a.left[0]).divide(new BigDecimal(a.right[0])), new BigDecimal(a.left[1]).divide(new BigDecimal(a.right[1])),
new BigDecimal(a.left[2]).divide(new BigDecimal(a.right[2])));
};
static final Supplier> AveragingBigDecimal_Supplier = () -> Pair.of(BigDecimal.ZERO, new long[1]);
static final Supplier> AveragingBigDecimal_Supplier_2 = () -> Pair.of(new BigDecimal[] { BigDecimal.ZERO, BigDecimal.ZERO },
new long[2]);
static final Supplier> AveragingBigDecimal_Supplier_3 = () -> Pair
.of(new BigDecimal[] { BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO }, new long[3]);
static final BinaryOperator> AveragingBigDecimal_Combiner = (a, b) -> {
a.setLeft(a.left.add(b.left));
a.right[0] += b.right[0];
return a;
};
static final BinaryOperator> AveragingBigDecimal_Combiner_2 = (a, b) -> {
a.left[0] = a.left[0].add(b.left[0]);
a.left[1] = a.left[1].add(b.left[1]);
a.right[0] += b.right[0];
a.right[1] += b.right[1];
return a;
};
static final BinaryOperator> AveragingBigDecimal_Combiner_3 = (a, b) -> {
a.left[0] = a.left[0].add(b.left[0]);
a.left[1] = a.left[1].add(b.left[1]);
a.left[2] = a.left[2].add(b.left[2]);
a.right[0] += b.right[0];
a.right[1] += b.right[1];
a.right[2] += b.right[2];
return a;
};
static final Function, BigDecimal> AveragingBigDecimal_Finisher = a -> {
if (a.right[0] == 0) {
throw new NoSuchElementException();
}
return a.left.divide(new BigDecimal(a.right[0]));
};
static final Function, Optional> AveragingBigDecimal_Finisher_op = a -> a.right[0] == 0 ? Optional. empty()
: Optional.of(a.left.divide(new BigDecimal(a.right[0])));
static final Function, Tuple2> AveragingBigDecimal_Finisher_2 = a -> {
if (a.right[0] == 0 || a.right[1] == 0) {
throw new NoSuchElementException();
}
return Tuple.of(a.left[0].divide(new BigDecimal(a.right[0])), a.left[1].divide(new BigDecimal(a.right[1])));
};
static final Function, Tuple3> AveragingBigDecimal_Finisher_3 = a -> {
if (a.right[0] == 0 || a.right[1] == 0 || a.right[2] == 0) {
throw new NoSuchElementException();
}
return Tuple.of(a.left[0].divide(new BigDecimal(a.right[0])), a.left[1].divide(new BigDecimal(a.right[1])),
a.left[2].divide(new BigDecimal(a.right[2])));
};
static final Supplier SummarizingChar_Supplier = CharSummaryStatistics::new;
static final BinaryOperator SummarizingChar_Combiner = (a, b) -> {
a.combine(b);
return a;
};
static final Supplier SummarizingByte_Supplier = ByteSummaryStatistics::new;
static final BinaryOperator SummarizingByte_Combiner = (a, b) -> {
a.combine(b);
return a;
};
static final Supplier SummarizingShort_Supplier = ShortSummaryStatistics::new;
static final BinaryOperator SummarizingShort_Combiner = (a, b) -> {
a.combine(b);
return a;
};
static final Supplier SummarizingInt_Supplier = IntSummaryStatistics::new;
static final BinaryOperator SummarizingInt_Combiner = (a, b) -> {
a.combine(b);
return a;
};
static final Supplier SummarizingLong_Supplier = LongSummaryStatistics::new;
static final BinaryOperator SummarizingLong_Combiner = (a, b) -> {
a.combine(b);
return a;
};
static final Supplier SummarizingFloat_Supplier = FloatSummaryStatistics::new;
static final BinaryOperator SummarizingFloat_Combiner = (a, b) -> {
a.combine(b);
return a;
};
static final Supplier SummarizingDouble_Supplier = DoubleSummaryStatistics::new;
static final BinaryOperator SummarizingDouble_Combiner = (a, b) -> {
a.combine(b);
return a;
};
static final Supplier SummarizingBigInteger_Supplier = BigIntegerSummaryStatistics::new;
static final BinaryOperator SummarizingBigInteger_Combiner = (a, b) -> {
a.combine(b);
return a;
};
static final Supplier SummarizingBigDecimal_Supplier = BigDecimalSummaryStatistics::new;
static final BinaryOperator SummarizingBigDecimal_Combiner = (a, b) -> {
a.combine(b);
return a;
};
static final Function, Object> Reducing_Finisher_0 = Holder::value;
static final BiConsumer, Object> Reducing_Accumulator = OptHolder::accept;
static final BinaryOperator> Reducing_Combiner = (a, b) -> {
if (b.present) {
a.accept(b.value);
}
return a;
};
static final Function, Optional> Reducing_Finisher = a -> a.present ? Optional.of(a.value) : (Optional) Optional.empty();
static final BiConsumer, Object> Reducing_Accumulator_2 = MappingOptHolder::accept;
static final BinaryOperator> Reducing_Combiner_2 = (a, b) -> {
if (b.present) {
if (a.present) {
a.value = a.op.apply(a.value, b.value);
} else {
a.value = b.value;
a.present = true;
}
}
return a;
};
static final Function, Optional> Reducing_Finisher_2 = a -> a.present ? Optional.of(a.value)
: (Optional) Optional.empty();
// ============================================================================================================
Collectors() {
}
static class CollectorImpl implements Collector {
private static final Function IDENTITY_FINISHER = t -> t;
private final Supplier supplier;
private final BiConsumer accumulator;
private final BinaryOperator combiner;
private final Function finisher;
private final Set characteristics;
CollectorImpl(final Supplier supplier, final BiConsumer accumulator, final BinaryOperator combiner,
final Set characteristics) {
this(supplier, accumulator, combiner, (Function) IDENTITY_FINISHER, characteristics);
}
@SuppressWarnings("rawtypes")
CollectorImpl(final Supplier supplier, final BiConsumer accumulator, final BinaryOperator combiner,
final Function finisher, final Set characteristics) {
this.supplier = (Supplier) supplier;
this.accumulator = (BiConsumer) accumulator;
this.combiner = combiner;
this.finisher = (Function) finisher;
this.characteristics = characteristics == null ? N. emptySet() : characteristics;
}
@Override
public BiConsumer accumulator() {
return accumulator;
}
@Override
public Supplier supplier() {
return supplier;
}
@Override
public BinaryOperator combiner() {
return combiner;
}
@Override
public Function finisher() {
return finisher;
}
@Override
public Set characteristics() {
return characteristics;
}
}
/**
*
*
* @param
* @param
* @param collectionFactory
* @return
*/
public static > Collector toCollection(Supplier collectionFactory) {
final BiConsumer accumulator = BiConsumers.ofAdd();
final BinaryOperator combiner = BinaryOperators. ofAddAllToBigger();
return new CollectorImpl<>(collectionFactory, accumulator, combiner, CH_ID);
}
/**
*
*
* @param
* @return
*/
public static Collector> toList() {
final Supplier> supplier = Suppliers. ofList();
return toCollection(supplier);
}
/**
*
*
* @param
* @return
*/
public static Collector> toLinkedList() {
final Supplier> supplier = Suppliers. ofLinkedList();
return toCollection(supplier);
}
/**
*
*
* @param
* @return
*/
public static Collector> toImmutableList() {
final Collector> downstream = toList();
@SuppressWarnings("rawtypes")
final Function, ImmutableList> finisher = (Function) ImmutableList_Finisher;
return collectingAndThen(downstream, finisher);
}
/**
*
*
* @param
* @return
*/
public static Collector> toSet() {
final Supplier> supplier = Suppliers. ofSet();
return toCollection(supplier);
}
/**
*
*
* @param
* @return
*/
public static Collector> toLinkedHashSet() {
final Supplier> supplier = Suppliers. ofLinkedHashSet();
return toCollection(supplier);
}
/**
*
*
* @param
* @return
*/
public static Collector> toImmutableSet() {
final Collector> downstream = toSet();
@SuppressWarnings("rawtypes")
final Function, ImmutableSet> finisher = (Function) ImmutableSet_Finisher;
return collectingAndThen(downstream, finisher);
}
/**
*
*
* @param
* @return
*/
public static Collector> toQueue() {
final Supplier> supplier = Suppliers. ofQueue();
return toCollection(supplier);
}
/**
*
*
* @param
* @return
*/
public static Collector> toDeque() {
final Supplier> supplier = Suppliers. ofDeque();
return toCollection(supplier);
}
/**
*
*
* @param
* @param
* @param collectionFactory
* @param atMostSize
* @return
*/
public static > Collector toCollection(final Supplier collectionFactory, final int atMostSize) {
final BiConsumer accumulator = (c, t) -> {
if (c.size() < atMostSize) {
c.add(t);
}
};
final BinaryOperator combiner = (a, b) -> {
if (a.size() < atMostSize) {
final int n = atMostSize - a.size();
if (b.size() <= n) {
a.addAll(b);
} else {
if (b instanceof List) {
a.addAll(((List) b).subList(0, n));
} else {
final Iterator