All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.streamnative.pulsar.handlers.kop.ListPair Maven / Gradle / Ivy

There is a newer version: 3.3.1.5
Show newest version
/**
 * 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();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy