org.apache.commons.lang3.stream.LangCollectors Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of commons-lang3 Show documentation
Show all versions of commons-lang3 Show documentation
Apache Commons Lang, a package of Java utility classes for the
classes that are in java.lang's hierarchy, or are considered to be so
standard as to justify existence in java.lang.
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.commons.lang3.stream;
import java.util.Collections;
import java.util.Objects;
import java.util.Set;
import java.util.StringJoiner;
import java.util.function.BiConsumer;
import java.util.function.BinaryOperator;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collector;
import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
/**
* Implementations of {@link Collector} that implement various reduction operations.
*
* This class is called {@code LangCollectors} instead of {@code Collectors} to avoid clashes with {@link Collectors}.
*
*
* @since 3.13.0
*/
public final class LangCollectors {
/**
* Simple implementation class for {@code Collector}.
*
* @param the type of elements to be collected
* @param the type of the result
*/
private static final class SimpleCollector implements Collector {
private final BiConsumer accumulator;
private final Set characteristics;
private final BinaryOperator combiner;
private final Function finisher;
private final Supplier supplier;
private SimpleCollector(final Supplier supplier, final BiConsumer accumulator, final BinaryOperator combiner, final Function finisher,
final Set characteristics) {
this.supplier = supplier;
this.accumulator = accumulator;
this.combiner = combiner;
this.finisher = finisher;
this.characteristics = characteristics;
}
@Override
public BiConsumer accumulator() {
return accumulator;
}
@Override
public Set characteristics() {
return characteristics;
}
@Override
public BinaryOperator combiner() {
return combiner;
}
@Override
public Function finisher() {
return finisher;
}
@Override
public Supplier supplier() {
return supplier;
}
}
private static final Set CH_NOID = Collections.emptySet();
/**
* Returns a {@code Collector} that concatenates the input elements, separated by the specified delimiter, in encounter order.
*
* This is a variation of {@link Collectors#joining()} that works with any element class, not just {@code CharSequence}.
*
*
* For example:
*
*
*
* Stream.of(Long.valueOf(1), Long.valueOf(2), Long.valueOf(3))
* .collect(LangCollectors.joining())
* returns "123"
*
*
* @return A {@code Collector} which concatenates Object elements, separated by the specified delimiter, in encounter order.
*/
public static Collector