这是一个常量工具类。Iterables类包含了一系列的静态方法,来操作或返回Iterable对象。
public final class Iterables { private Iterables() {} }
1.boolean removeAll(Iterable removeFrom,Collection elementsToRemove)
/** * Removes, from an iterable, every element that belongs to the provided * collection. * * <p>This method calls Collection#removeAll if iterable is a * collection, and Iterators#removeAll otherwise. */ @CanIgnoreReturnValue public static boolean removeAll(Iterable<?> removeFrom, Collection<?> elementsToRemove) { return (removeFrom instanceof Collection) ? ((Collection<?>) removeFrom).removeAll(checkNotNull(elementsToRemove)) : Iterators.removeAll(removeFrom.iterator(), elementsToRemove); }
实例:
public class Test { public static void main(String[] args) { List<String> list = Lists.newArrayList(); list.add("one"); list.add("two"); list.add("three"); List<String> list2 = Lists.newArrayList(); list2.add("two"); list2.add("four"); System.out.println(Iterables.removeAll(list, list2)); // true System.out.println(list.toString()); // [one, three] } }
2.boolean retainAll(Iterable removeFrom,Collection elementsToRetain)
/** * Removes, from an iterable, every element that does not belong to the * provided collection. * * <p>This method calls Collection#retainAll if iterable is a * collection, and Iterators#retainAll otherwise. */ @CanIgnoreReturnValue public static boolean retainAll(Iterable<?> removeFrom, Collection<?> elementsToRetain) { return (removeFrom instanceof Collection) ? ((Collection<?>) removeFrom).retainAll(checkNotNull(elementsToRetain)) : Iterators.retainAll(removeFrom.iterator(), elementsToRetain); }
实例:
public class Test { public static void main(String[] args) { List<String> list = Lists.newArrayList(); list.add("one"); list.add("two"); list.add("three"); List<String> list2 = Lists.newArrayList(); list2.add("two"); list2.add("three"); list2.add("four"); System.out.println(Iterables.retainAll(list, list2)); // true System.out.println(list.toString()); // [two, three] } }
3.boolean removeIf(Iterable removeFrom,Predicate predicate)
/** * Removes, from an iterable, every element that satisfies the provided * predicate. * * <p>Removals may or may not happen immediately as each element is tested * against the predicate. The behavior of this method is not specified if * {@code predicate} is dependent on {@code removeFrom}. */ @CanIgnoreReturnValue public static <T> boolean removeIf(Iterable<T> removeFrom, Predicate<? super T> predicate) { if (removeFrom instanceof RandomAccess && removeFrom instanceof List) { return removeIfFromRandomAccessList((List<T>) removeFrom, checkNotNull(predicate)); } return Iterators.removeIf(removeFrom.iterator(), predicate); }
实例:
public class Test { public static void main(String[] args) { List<String> list = Lists.newArrayList(); list.add("one"); list.add("three"); list.add("two"); list.add("two"); list.add("three"); System.out.println(Iterables.removeIf(list, new Predicate<String>() { @Override public boolean apply(String input) { return input.length() == 5; } })); // [one, two, two] System.out.println(list.toString()); } }