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

org.opencb.commons.utils.ListUtils Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2015-2017 OpenCB
 *
 * 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 org.opencb.commons.utils;

import java.lang.reflect.Array;
import java.util.*;


public class ListUtils extends CollectionUtils {

    public static  List unique(List array) {
        if (array == null) {
            throw new NullPointerException("Not initizalize array");
        }
        List uniq = new ArrayList<>();
        HashMap visited = new HashMap<>();
        for (E s : array) {
            if (!visited.containsKey(s)) {
                uniq.add(s);
                visited.put(s, true);
            }
        }
        return uniq;
    }


    public static  List duplicated(List array) {
        if (array == null) {
            throw new NullPointerException("Not initizalize array");
        }
        List dupl = new ArrayList<>();
        HashMap visited = new HashMap<>();
        for (E s : array) {
            if (!visited.containsKey(s)) {
                visited.put(s, true);
            } else {
                if (!dupl.contains(s)) {
                    dupl.add(s);
                }

            }
        }
        return dupl;
    }

    public static  List intersection(List list1, List list2) {
        if (list1 == null || list2 == null) {
            throw new NullPointerException("Not initizalized lists");
        }
        List intersection = new LinkedList<>();
        E item;
        ListIterator iter = list1.listIterator();
        while (iter.hasNext()) {
            item = iter.next();
            if (list2.contains(item)) {
                intersection.add(item);
            }
        }
        return intersection;
    }

    public static  List concat(final List list1, final List list2) {
        if (list1 == null || list2 == null) {
            throw new NullPointerException("Not initizalized lists");
        }
        List concat = new ArrayList<>(list1.size() + list2.size());
        concat.addAll(list1);
        concat.addAll(list2);
        return concat;
    }

    public static  List union(final List list1, final List list2) {
        if (list1 == null || list2 == null) {
            throw new NullPointerException("Not initizalized lists");
        }
        List concat = new ArrayList<>(list1.size() + list2.size());
        concat.addAll(list1);
        E item;
        ListIterator iter = list1.listIterator();
        while (iter.hasNext()) {
            item = iter.next();
            if (!concat.contains(item)) {
                concat.add(item);
            }
        }
        return concat;
    }

    public static  int sizeNotNull(final List list) {
        int count = 0;
        for (E e : list) {
            if (e != null) {
                count++;
            }
        }
        return count;
    }

    public static  List notEmpty(final List list) {
        List noEmpty = new ArrayList(list.size());
        for (E e : list) {
            if (e != null && !e.toString().equals("")) {
                noEmpty.add(e);
            }
        }
        return noEmpty;
    }

    @Deprecated
    public static  List itemsToList(E... elements) {
        List list = new ArrayList(elements.length);
        for (E elem : elements) {
            list.add(elem);
        }
        return list;
    }

    public static  List subList(final List oriList, int[] indexes) {
        List list = new ArrayList(indexes.length);
        for (int index : indexes) {
            if (index >= 0 && index < oriList.size()) {
                list.add(oriList.get(index));
            }
        }
        return list;
    }

    public static  List subList(final List oriList, int start, int end) {
        if (start < 0 || end >= oriList.size()) {
            return null;
        }
        List list = new ArrayList(end - start + 1);
        for (int i = start; i <= end; i++) {
            list.add(oriList.get(i));
        }
        return list;
    }

    @SuppressWarnings({"rawtypes"})
    public static  int[] order(final List array) {
        return order(array, false);
    }

    @SuppressWarnings({"rawtypes"})
    public static  int[] order(List array, boolean desc) {
        Map> map = new TreeMap<>();
        for (int i = 0; i < array.size(); ++i) {
            if (map.containsKey(array.get(i))) {
                map.get(array.get(i)).add(i);
            } else {
                List list = new ArrayList<>();
                list.add(i);
                map.put(array.get(i), list);
            }
        }
        List indices = new ArrayList<>();
        for (List list : map.values()) {
            indices.addAll(list);
        }

        if (desc) {
            Collections.reverse(indices);
        }
        return toIntArray(indices);
    }


    @SuppressWarnings({"rawtypes"})
    public static  List ordered(final List array, int[] order) {
        if (array.size() != order.length) {
            return null;
        }
        List list = new ArrayList<>(array.size());
        for (int i : order) {
            list.add(array.get(i));
        }
        return list;
    }

    public static  List initialize(int numElements, E elem) {
        List list = new ArrayList<>(numElements);
        for (int i = 0; i < numElements; i++) {
            list.add(elem);
        }
        return list;
    }

    public static  List initialize(int numElements, E prefix, int startNumber) {
        List list = new ArrayList<>(numElements);
        for (int i = 0; i < numElements; i++) {
            list.add(prefix.toString() + startNumber++);
        }
        return list;
    }

    public static List random(int numElements) {
        return random(numElements, 1.0);
    }

    public static List random(int numElements, double scaleFactor) {
        try {
            Thread.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        Random r = new Random(System.currentTimeMillis());
        List randomList = new ArrayList<>(numElements);
        for (int i = 0; i < numElements; i++) {
            randomList.add(r.nextDouble() * scaleFactor);
        }
        return randomList;
    }

    public static List randomGaussian(int numElements) {
        return randomGaussian(numElements, 1.0);
    }

    public static List randomGaussian(int numElements, double scaleFactor) {
        Random r = new Random(System.currentTimeMillis());
        List randomList = new ArrayList<>(numElements);
        for (int i = 0; i < numElements; i++) {
            randomList.add(r.nextGaussian() * scaleFactor);
        }
        return randomList;
    }

    /*
     *
     * Converters from List to the same type of Array, signature:  toArray()
     *
     */
    @SuppressWarnings("unchecked")
    public static  E[] toArray(final List list) {
        E[] array = null;
        if (list != null && list.size() > 0) {
            array = (E[]) Array.newInstance(list.get(0).getClass(), list.size());
            for (int i = 0; i < list.size(); i++) {
                if (list.get(i) != null) {
                    array[i] = list.get(i);
                } else {
                    array[i] = null;
                }
            }
        }
        return array;
    }

    public static  List toList(final Enumeration enumeration) {
        return Collections.list(enumeration);
    }

    /*
     *
     * Converters from List to different TYPE of Arrays or List, method name:  toTYPEArray() or toTYPEList()
     *
     */
    public static  double[] toDoubleArray(final List list) {
        return toDoubleArray(list, Double.NaN);
    }

    public static  double[] toDoubleArray(final List list, Double defaultValue) {
        double[] doubleArray = null;
        if (list != null) {
            doubleArray = new double[list.size()];
            for (int i = 0; i < list.size(); i++) {
                if (list.get(i) != null) {
                    try {
                        doubleArray[i] = Double.parseDouble(list.get(i).toString());
                    } catch (NumberFormatException nfe) {
                        doubleArray[i] = defaultValue;
                    }
                } else {
                    doubleArray[i] = defaultValue;
                }
            }
        }
        return doubleArray;
    }

    public static  List toDoubleList(final List list) {
        List doubleList = null;
        if (list != null) {
            doubleList = new ArrayList<>(list.size());
            for (E e : list) {
                if (e != null) {
                    try {
                        doubleList.add(Double.parseDouble(e.toString()));
                    } catch (NumberFormatException nfe) {
                        doubleList.add(null);
                    }
                } else {
                    doubleList.add(null);
                }
            }
        }
        return doubleList;
    }


    public static  int[] toIntArray(final List list) {
        return toIntArray(list, -1);
    }

    public static  int[] toIntArray(final List list, int defaultValue) {
        int[] intArray = null;
        if (list != null) {
            intArray = new int[list.size()];
            for (int i = 0; i < list.size(); i++) {
                if (list.get(i) != null) {
                    try {
                        intArray[i] = Integer.parseInt(list.get(i).toString());
                    } catch (NumberFormatException nfe) {
                        intArray[i] = defaultValue;
                    }
                } else {
                    intArray[i] = defaultValue;
                }
            }
        }
        return intArray;
    }

    public static  List toIntegerList(final List list) {
        List integerList = null;
        if (list != null) {
            integerList = new ArrayList<>(list.size());
            for (E e : list) {
                if (e != null) {
                    try {
                        integerList.add(Integer.parseInt(e.toString()));
                    } catch (NumberFormatException nfe) {
                        integerList.add(null);
                    }
                } else {
                    integerList.add(null);
                }
            }
        }
        return integerList;
    }

    public static  boolean[] toBooleanArray(final List list) {
        return toBooleanArray(list, false);
    }

    public static  boolean[] toBooleanArray(final List list, boolean defaultValue) {
        boolean[] booleanArr = null;
        if (list != null) {
            booleanArr = new boolean[list.size()];
            for (int i = 0; i < list.size(); i++) {
                if (list.get(i) != null) {
                    try {
                        booleanArr[i] = "true".equalsIgnoreCase(list.get(i).toString().trim()) || "1".equals(list.get(i).toString().trim());
                    } catch (NumberFormatException nfe) {
                        booleanArr[i] = defaultValue;
                    }
                } else {
                    booleanArr[i] = defaultValue;
                }
            }
        }
        return booleanArr;
    }

    public static  List toBooleanList(final List list) {
        List booleanList = null;
        if (list != null) {
            booleanList = new ArrayList<>(list.size());
            for (E e : list) {
                if (e != null) {
                    booleanList.add("true".equalsIgnoreCase(e.toString().trim()) || "1".equals(e.toString().trim()));
                } else {
                    booleanList.add(null);
                }
            }
        }
        return booleanList;
    }


    public static  String[] toStringArray(final List list) {
        return toStringArray(list, null);
    }

    public static  String[] toStringArray(final List list, String defaultValue) {
        String[] array = null;
        if (list != null) {
            array = new String[list.size()];
            for (int i = 0; i < list.size(); i++) {
                if (list.get(i) != null) {
                    array[i] = list.get(i).toString();
                } else {
                    array[i] = defaultValue;
                }
            }
        }
        return array;
    }

    public static  List toStringList(final List list) {
        List stringList = null;
        if (list != null) {
            stringList = new ArrayList<>(list.size());
            for (E e : list) {
                if (e != null) {
                    stringList.add(e.toString());
                } else {
                    stringList.add(null);
                }
            }
        }
        return stringList;
    }


    /*
     *
     * toString methods
     *
     */
    public static  String toString(final List list) {
        return toString(list, "\t");
    }

    public static  String toString(final List list, String separator) {
        StringBuilder sb = new StringBuilder();
        if (list != null && list.size() > 0) {
            for (int i = 0; i < list.size() - 1; i++) {
                if (list.get(i) != null) {
                    sb.append(list.get(i).toString()).append(separator);
                } else {
                    sb.append("null").append(separator);
                }
            }
            if (list.get(list.size() - 1) != null) {
                sb.append(list.get(list.size() - 1).toString());
            } else {
                sb.append("null");
            }
        }
        return sb.toString();
    }


    @Deprecated
    public static  List toList(final E[] array) {
        List list = new ArrayList<>(array.length);
        for (E e : array) {
            list.add(e);
        }
        return list;
    }

    @Deprecated
    public static List toList(final double[] array) {
        List list = new ArrayList<>(array.length);
        for (int i = 0; i < array.length; i++) {
            list.add(array[i]);
        }
        return list;
    }

    @Deprecated
    public static List toList(final int[] array) {
        List list = new ArrayList<>(array.length);
        for (int i = 0; i < array.length; i++) {
            list.add(array[i]);
        }
        return list;
    }

    @Deprecated
    public static  List toStringList(final E[] array) {
        List list = new ArrayList<>(array.length);
        for (int i = 0; i < array.length; i++) {
            list.add(array[i].toString());
        }
        return list;
    }

    @Deprecated
    public static List toStringList(final double[] array) {
        List list = new ArrayList<>(array.length);
        for (int i = 0; i < array.length; i++) {
            list.add(String.valueOf(array[i]));
        }
        return list;
    }

    @Deprecated
    public static List toStringList(final int[] array) {
        List list = new ArrayList<>(array.length);
        for (int i = 0; i < array.length; i++) {
            list.add(String.valueOf(array[i]));
        }
        return list;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy