私はまた、ストリームAPIは良いと思うが、短い操作では冗長だと思う。私はいくつかのプロジェクトでこれらのユーティリティメソッドを使用しました:
import java.util.List;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Functions {
public static <T,V> List<V> map(final List<T> in, final Function<T, V> function) {
return in == null ? null : map(in.stream(), function);
}
public static <T,V> List<V> map(final Stream<T> in, final Function<T, V> function) {
return in == null ? null : in
.map(function)
.collect(Collectors.toList());
}
public static <T> List<T> filter(final List<T> in, final Predicate<T> predicate) {
return in == null ? null : filter(in.stream(), predicate);
}
public static <T> List<T> filter(final Stream<T> in, final Predicate<T> predicate) {
return in == null ? null : in
.filter(predicate)
.collect(Collectors.toList());
}
}
List<String> wrapped = Functions.map(myList, each -> "[" + each + "]");
通常、メソッドも静的にインポートします。
注'(P-> p.isCorrect())という強力なextenedストリーム型
を利用することができます'(MyClass :: isCorrect)'としてより正確に記述されます。 –
@BoristheSpider、それはなぜより正確ですか? – Andrew
@AndrewTobilkoラムダは、 'static'メソッドの作成、あるいは最悪の場合、匿名' class'の作成を必要とするかもしれません。メソッド参照を使用するということは、これがどれも必要でないことを意味します。 –