io.streamnative.pulsar.handlers.kop.ListPair Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of pulsar-protocol-handler-kafka Show documentation
Show all versions of pulsar-protocol-handler-kafka Show documentation
Kafka on Pulsar implemented using Pulsar Protocol Handler
/**
* Copyright (c) 2019 - 2024 StreamNative, Inc.. All Rights Reserved.
*/
/**
* 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 io.streamnative.pulsar.handlers.kop;
import io.streamnative.pulsar.handlers.kop.utils.CoreUtils;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* A wrapper of Map>, which can be returned by {@link java.util.stream.Collectors#groupingBy} with
* a {@link Function} that returns a Boolean.
*
* If we operates on the returned Map directly with {@link Map#get}, a null value might be returned. This class returns
* a empty map to avoid null check. In addition, the method name is more readable than `get(true)` or `get(false)`.
*
* @param
*/
public class ListPair {
private final Map> data;
public ListPair map(final Function function) {
return of(CoreUtils.mapValue(data, list -> CoreUtils.listToList(list, function)));
}
public List getSuccessfulList() {
return Optional.ofNullable(data.get(true)).orElse(Collections.emptyList());
}
public List getFailedList() {
return Optional.ofNullable(data.get(false)).orElse(Collections.emptyList());
}
public static ListPair split(final Stream stream,
final Function function) {
return ListPair.of(stream.collect(Collectors.groupingBy(function)));
}
public static ListPair of(final Map> data) {
return new ListPair<>(data);
}
private ListPair(final Map> data) {
this.data = (data != null) ? data : Collections.emptyMap();
}
}