silentbalanceyh/vertx-zero

View on GitHub
vertx-gaia/vertx-ams/src/main/java/io/horizon/util/CFind.java

Summary

Maintainability
A
0 mins
Test Coverage
package io.horizon.util;

import io.horizon.eon.VValue;
import io.horizon.fn.HFn;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;

import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Collectors;

/**
 * @author lang : 2023/4/30
 */
class CFind {
    static JsonObject find(final JsonArray array, final String field, final Object value) {
        return HUt.itJArray(array).filter(item -> {
            if (Objects.isNull(value)) {
                return Objects.isNull(item.getValue(field));
            } else {
                return value.equals(item.getValue(field));
            }
        }).findAny().orElse(null);
    }

    static JsonObject find(final JsonArray array, final JsonObject subsetQ) {
        return HUt.itJArray(array).filter(item -> {
            final Set<String> keys = subsetQ.fieldNames();
            final JsonObject subset = HUt.elementSubset(item, keys);
            return subset.equals(subsetQ);
        }).findAny().orElse(new JsonObject());
    }

    static <T> T find(final List<T> list, final Predicate<T> fnFilter) {
        return HFn.runOr(() -> {
            final List<T> filtered = list.stream().filter(fnFilter).collect(Collectors.toList());
            return HFn.runOr(filtered.isEmpty(),
                () -> null,
                () -> filtered.get(VValue.IDX));
        }, list, fnFilter);
    }
}