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

com.gitee.feizns.ArrayUtils Maven / Gradle / Ivy

Go to download

Java 类型,反射,属性以及实体类操作工具类。

There is a newer version: 5.5-RELEASE
Show newest version
package com.gitee.feizns;

import lombok.NonNull;

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Iterator;
import java.util.Objects;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.stream.Collectors;

/**
 * 数组
 * @author feizns
 * @since 2019/5/13
 */
public abstract class ArrayUtils {

    /**
     * 查找第一个元素的下标
     * @param test 查找规则
     * @param array 需要筛选的数组
     * @return 下标
     */
    public static  int findIndex(@NonNull Predicate test, T... array) {
        if ( array != null ) {
            for (int i = 0; i < array.length; i++) {
                if ( test.test(array[i]) )
                    return i;
            }
        }
        return -1;
    }

    /**
     * @see ArrayUtils#findIndex(java.util.function.Predicate, java.lang.Object[])
     * @param test 查找规则
     * @param array 数组
     * @return 下标
     */
    public static final  int indexOf(@NonNull Predicate test, T... array) {
        return findIndex(test, array);
    }

    /**
     * 查找第一个元素
     * @param test 查找规则
     * @param array 数组
     * @return 匹配查找规则的第一个元素
     */
    public static  T findFirst(@NonNull Predicate test, T... array) {
        int index = -1;
        return (index = findIndex(test, array)) == -1 ? null : array[index];
    }

    /**
     * 将数组包装成iterator
     * @param ele 数组
     * @param 
     * @return iterator
     */
    public static  Iterator iterator(T... ele) {
        return new Iterator() {

            int index = 0;

            @Override
            public boolean hasNext() {
                return index != ele.length;
            }

            @Override
            public T next() {
                return ele[index++];
            }

        };
    }

    /**
     * 将数组包装成功iterable
     * @param ele
     * @param 
     * @return
     */
    public static  Iterable iterable(T... ele) {
        return () -> iterator(ele);
    }

    /**
     *
     * @param ele
     * @param 
     * @return
     */
    public static final  boolean isEmpty(T... ele) {
        return ele == null || ele.length == 0;
    }

    /**
     * 遍历一个未知的数组
     * @param array
     * @param consumer
     */
    public static final void forEach(Object array, Consumer consumer) {
        if ( array != null && array.getClass().isArray() ) {
            for (int i = 0; i < Array.getLength(array); i++) {
                consumer.accept(Array.get(array, i));
            }
        }
    }

    /**
     * 将数组转换成用逗号分隔的字符串
     * @param arr
     * @param 
     * @return
     */
    public static  String toString(@NonNull T... arr) {
        return toString(",", arr);
    }

    /**
     * 将数组转换成用逗号分隔的字符串
     * @param delimiter
     * @param arr
     * @param 
     * @return
     */
    public static  String toString(String delimiter, @NonNull T... arr) {
        return Arrays.stream(arr)
                .filter(Objects::nonNull)
                .map(Objects::toString)
                .collect(Collectors.joining(delimiter));
    }

}