시작을 호출자가 그 기준으로 필터링하고자하는 객체의 유형을 선언하자 그리고 같이 당신의 방법을 변경합니다. 주문을 제공하려면 Comparator<T>
을 사용해야합니다.
static <T> void removeAllLessThan(Collection<T> collection,
Comparator<T> comparator, T t) {...}
그런 다음 상속을 사용하여 작업 할 때 유연성을 허용합니다. 그는 t1 < t2
의 상당을 할 수있다, 그러나 비교기는 T의 슈퍼 타입이 될 수 있으며, 컬렉션 T를 확장 아무것도 될 수 있습니다 다음, 삭제 과정에 실수가
static <T> void removeAllLessThan(Collection<? extends T> collection,
Comparator<? super T> comparator, T t) {...}
. 컬렉션을 반복하면서 컬렉션에서 삭제할 수있는 유일한 메커니즘은 Iterator
입니다. 그 밖의 것은 ConcurrentModificationException
입니다.
static <T> void removeAllLessThan(Iterable<? extends T> iterable,
Comparator<? super T> comparator, T t) {
for (Iterator<? extends T> it = iterable.iterator(); it.hasNext();) {
if (comparator.compare(it.next(), t) < 0) {
it.remove();
}
}
}
서명 변경에 유의하십시오.
마지막으로 매우 구체적인 방법입니다. 당신은
public <T> removeIf(Iterable<? extends T> iterable,
Predicate<? super T> predicate){...}
Predicate
그냥 부울 eval
방법을 가지고 도서관을 많이가 제공하는 인터페이스입니다 서명, 일반적인 removeIf
방법을 쓰기 등 removeIfGreaterThan, removeIfEqualIgnoringCase 같은 거의 동일한 방법을 많이 작성해야합니다.
'c '는 객체의 모음입니까? –
'Object' 대신에'compareTo'를 구현 한 클래스를 사용하지 않는 이유는 무엇입니까? –
모든 개체에서이 작업을 수행하기 때문에 – GullDe