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

org.aksw.commons.collections.IterableUtils Maven / Gradle / Ivy

There is a newer version: 0.9.9
Show newest version
package org.aksw.commons.collections;

import java.util.Comparator;

import com.google.common.collect.ComparisonChain;
import com.google.common.collect.Iterables;
import com.google.common.collect.Streams;

public class IterableUtils {
    
    public static  T expectOneItem(Iterable iterable) {
    	return IteratorUtils.expectOneItem(iterable.iterator());
    }

    public static  T expectZeroOrOneItems(Iterable iterable) {
    	return IteratorUtils.expectZeroOrOneItems(iterable.iterator());
    }
	
    /**
     * Will only compare as many items as there are in the shorter iterable
     * 
     * @param itemComparator
     * @return
     */
    public static  Comparator> newComparatorForIterablesOfEqualLength(Comparator itemComparator) {
    	return (a, b) -> compareIterablesOfEqualLength(a, b, itemComparator);
    }

    /**
     * Will only compare as many items as there are in the shorter iterable
     * 
     * @param a
     * @param b
     * @param itemComparator
     * @return
     */
    public static  int compareIterablesOfEqualLength(
    		Iterable a,
    		Iterable b,
    		Comparator itemComparator) {
    	int result = Streams.zip(Streams.stream(a), Streams.stream(b), (x, y) -> itemComparator.compare(x, y))
    		.mapToInt(x -> x)
    		.filter(x -> x != 0)
    		.findFirst().orElse(0);
    	
    	return result;
    }
    
    public static  int compareByLengthThenItems(Iterable a, Iterable b, Comparator itemComparator) {
    	int result = ComparisonChain.start()
				.compare(Iterables.size(a), Iterables.size(b))
				.compare(a, b, newComparatorForIterablesOfEqualLength(itemComparator))
				.result();
		return result;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy