228 lines
7.2 KiB
Java
228 lines
7.2 KiB
Java
package com.google.common.collect;
|
|
|
|
import com.google.common.base.Function;
|
|
import com.google.common.base.Objects;
|
|
import com.google.common.base.Preconditions;
|
|
import com.google.common.primitives.Ints;
|
|
import java.io.Serializable;
|
|
import java.util.AbstractList;
|
|
import java.util.AbstractSequentialList;
|
|
import java.util.ArrayList;
|
|
import java.util.Collection;
|
|
import java.util.Iterator;
|
|
import java.util.List;
|
|
import java.util.ListIterator;
|
|
import java.util.RandomAccess;
|
|
|
|
/* loaded from: classes.dex */
|
|
public final class Lists {
|
|
|
|
private static class TransformingRandomAccessList<F, T> extends AbstractList<T> implements RandomAccess, Serializable {
|
|
final List<F> a;
|
|
final Function<? super F, ? extends T> b;
|
|
|
|
TransformingRandomAccessList(List<F> list, Function<? super F, ? extends T> function) {
|
|
Preconditions.a(list);
|
|
this.a = list;
|
|
Preconditions.a(function);
|
|
this.b = function;
|
|
}
|
|
|
|
@Override // java.util.AbstractList, java.util.AbstractCollection, java.util.Collection, java.util.List
|
|
public void clear() {
|
|
this.a.clear();
|
|
}
|
|
|
|
@Override // java.util.AbstractList, java.util.List
|
|
public T get(int i) {
|
|
return this.b.apply(this.a.get(i));
|
|
}
|
|
|
|
@Override // java.util.AbstractCollection, java.util.Collection, java.util.List
|
|
public boolean isEmpty() {
|
|
return this.a.isEmpty();
|
|
}
|
|
|
|
@Override // java.util.AbstractList, java.util.AbstractCollection, java.util.Collection, java.lang.Iterable, java.util.List
|
|
public Iterator<T> iterator() {
|
|
return listIterator();
|
|
}
|
|
|
|
@Override // java.util.AbstractList, java.util.List
|
|
public ListIterator<T> listIterator(int i) {
|
|
return new TransformedListIterator<F, T>(this.a.listIterator(i)) { // from class: com.google.common.collect.Lists.TransformingRandomAccessList.1
|
|
@Override // com.google.common.collect.TransformedIterator
|
|
T a(F f) {
|
|
return TransformingRandomAccessList.this.b.apply(f);
|
|
}
|
|
};
|
|
}
|
|
|
|
@Override // java.util.AbstractList, java.util.List
|
|
public T remove(int i) {
|
|
return this.b.apply(this.a.remove(i));
|
|
}
|
|
|
|
@Override // java.util.AbstractCollection, java.util.Collection, java.util.List
|
|
public int size() {
|
|
return this.a.size();
|
|
}
|
|
}
|
|
|
|
private static class TransformingSequentialList<F, T> extends AbstractSequentialList<T> implements Serializable {
|
|
final List<F> a;
|
|
final Function<? super F, ? extends T> b;
|
|
|
|
TransformingSequentialList(List<F> list, Function<? super F, ? extends T> function) {
|
|
Preconditions.a(list);
|
|
this.a = list;
|
|
Preconditions.a(function);
|
|
this.b = function;
|
|
}
|
|
|
|
@Override // java.util.AbstractList, java.util.AbstractCollection, java.util.Collection, java.util.List
|
|
public void clear() {
|
|
this.a.clear();
|
|
}
|
|
|
|
@Override // java.util.AbstractSequentialList, java.util.AbstractList, java.util.List
|
|
public ListIterator<T> listIterator(int i) {
|
|
return new TransformedListIterator<F, T>(this.a.listIterator(i)) { // from class: com.google.common.collect.Lists.TransformingSequentialList.1
|
|
@Override // com.google.common.collect.TransformedIterator
|
|
T a(F f) {
|
|
return TransformingSequentialList.this.b.apply(f);
|
|
}
|
|
};
|
|
}
|
|
|
|
@Override // java.util.AbstractCollection, java.util.Collection, java.util.List
|
|
public int size() {
|
|
return this.a.size();
|
|
}
|
|
}
|
|
|
|
public static <E> ArrayList<E> a() {
|
|
return new ArrayList<>();
|
|
}
|
|
|
|
public static <E> ArrayList<E> b(int i) {
|
|
CollectPreconditions.a(i, "initialArraySize");
|
|
return new ArrayList<>(i);
|
|
}
|
|
|
|
public static <E> ArrayList<E> c(int i) {
|
|
return new ArrayList<>(a(i));
|
|
}
|
|
|
|
static int d(List<?> list, Object obj) {
|
|
if (list instanceof RandomAccess) {
|
|
return e(list, obj);
|
|
}
|
|
ListIterator<?> listIterator = list.listIterator(list.size());
|
|
while (listIterator.hasPrevious()) {
|
|
if (Objects.a(obj, listIterator.previous())) {
|
|
return listIterator.nextIndex();
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
private static int e(List<?> list, Object obj) {
|
|
if (obj == null) {
|
|
for (int size = list.size() - 1; size >= 0; size--) {
|
|
if (list.get(size) == null) {
|
|
return size;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
for (int size2 = list.size() - 1; size2 >= 0; size2--) {
|
|
if (obj.equals(list.get(size2))) {
|
|
return size2;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
static int a(int i) {
|
|
CollectPreconditions.a(i, "arraySize");
|
|
return Ints.b(i + 5 + (i / 10));
|
|
}
|
|
|
|
private static int c(List<?> list, Object obj) {
|
|
int size = list.size();
|
|
int i = 0;
|
|
if (obj == null) {
|
|
while (i < size) {
|
|
if (list.get(i) == null) {
|
|
return i;
|
|
}
|
|
i++;
|
|
}
|
|
return -1;
|
|
}
|
|
while (i < size) {
|
|
if (obj.equals(list.get(i))) {
|
|
return i;
|
|
}
|
|
i++;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
static int b(List<?> list, Object obj) {
|
|
if (list instanceof RandomAccess) {
|
|
return c(list, obj);
|
|
}
|
|
ListIterator<?> listIterator = list.listIterator();
|
|
while (listIterator.hasNext()) {
|
|
if (Objects.a(obj, listIterator.next())) {
|
|
return listIterator.previousIndex();
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
public static <E> ArrayList<E> a(Iterable<? extends E> iterable) {
|
|
Preconditions.a(iterable);
|
|
if (iterable instanceof Collection) {
|
|
return new ArrayList<>(Collections2.a(iterable));
|
|
}
|
|
return a(iterable.iterator());
|
|
}
|
|
|
|
public static <E> ArrayList<E> a(Iterator<? extends E> it) {
|
|
ArrayList<E> a = a();
|
|
Iterators.a(a, it);
|
|
return a;
|
|
}
|
|
|
|
public static <F, T> List<T> a(List<F> list, Function<? super F, ? extends T> function) {
|
|
return list instanceof RandomAccess ? new TransformingRandomAccessList(list, function) : new TransformingSequentialList(list, function);
|
|
}
|
|
|
|
static boolean a(List<?> list, Object obj) {
|
|
Preconditions.a(list);
|
|
if (obj == list) {
|
|
return true;
|
|
}
|
|
if (!(obj instanceof List)) {
|
|
return false;
|
|
}
|
|
List list2 = (List) obj;
|
|
int size = list.size();
|
|
if (size != list2.size()) {
|
|
return false;
|
|
}
|
|
if (!(list instanceof RandomAccess) || !(list2 instanceof RandomAccess)) {
|
|
return Iterators.a(list.iterator(), (Iterator<?>) list2.iterator());
|
|
}
|
|
for (int i = 0; i < size; i++) {
|
|
if (!Objects.a(list.get(i), list2.get(i))) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
}
|