new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
});
new Thread(() -> {
System.out.println(Thread.currentThread().getName());
}).start();
函数式接口
@FunctionalInterface
只允许有一个抽象方法,例如Runable和Callable接口。
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
@FunctionalInterface
public interface Callable {
V call() throws Exception;
}
继承关系如图所示
public interface AutoCloseable {
void close() throws Exception;
}
public interface BaseStream> extends AutoCloseable { Iterator iterator(); Spliterator spliterator(); boolean isParallel(); S sequential(); S parallel(); S unordered(); S onClose(Runnable closeHandler); @Override void close(); }
public interface Streamextends BaseStream > { Stream filter(Predicate super T> predicate); Stream map(Function super T, ? extends R> mapper); IntStream mapToInt(ToIntFunction super T> mapper); LongStream mapToLong(ToLongFunction super T> mapper); DoubleStream mapToDouble(ToDoubleFunction super T> mapper); Stream flatMap(Function super T, ? extends Stream extends R>> mapper); IntStream flatMapToInt(Function super T, ? extends IntStream> mapper); LongStream flatMapToLong(Function super T, ? extends LongStream> mapper); DoubleStream flatMapToDouble(Function super T, ? extends DoubleStream> mapper); Stream distinct(); Stream sorted(); Stream sorted(Comparator super T> comparator); Stream peek(Consumer super T> action); Stream limit(long maxSize); Stream skip(long n); void forEach(Consumer super T> action); void forEachOrdered(Consumer super T> action); Object[] toArray(); A[] toArray(IntFunction generator); T reduce(T identity, BinaryOperator accumulator); Optional reduce(BinaryOperator accumulator); U reduce(U identity, BiFunction accumulator, BinaryOperator combiner); R collect(Supplier supplier, BiConsumer accumulator, BiConsumer combiner); R collect(Collector super T, A, R> collector); Optional min(Comparator super T> comparator); Optional max(Comparator super T> comparator); long count(); boolean anyMatch(Predicate super T> predicate); boolean allMatch(Predicate super T> predicate); boolean noneMatch(Predicate super T> predicate); Optional findFirst(); Optional findAny(); public static Builder builder() { return new Streams.StreamBuilderImpl<>(); } public static Stream empty() { return StreamSupport.stream(Spliterators. emptySpliterator(), false); } public static Stream of(T t) { return StreamSupport.stream(new Streams.StreamBuilderImpl<>(t), false); } @SafeVarargs @SuppressWarnings("varargs") // Creating a stream from an array is safe public static Stream of(T... values) { return Arrays.stream(values); } public static Stream iterate(final T seed, final UnaryOperator f) { Objects.requireNonNull(f); final Iterator iterator = new Iterator () { @SuppressWarnings("unchecked") T t = (T) Streams.NONE; @Override public boolean hasNext() { return true; } @Override public T next() { return t = (t == Streams.NONE) ? seed : f.apply(t); } }; return StreamSupport.stream(Spliterators.spliteratorUnknownSize( iterator, Spliterator.ORDERED | Spliterator.IMMUTABLE), false); } public static Stream concat(Stream extends T> a, Stream extends T> b) { Objects.requireNonNull(a); Objects.requireNonNull(b); @SuppressWarnings("unchecked") Spliterator split = new Streams.ConcatSpliterator.OfRef<>( (Spliterator ) a.spliterator(), (Spliterator ) b.spliterator()); Stream stream = StreamSupport.stream(split, a.isParallel() || b.isParallel()); return stream.onClose(Streams.composedClose(a, b)); } public interface Builder extends Consumer { @Override void accept(T t); default Builder add(T t) { accept(t); return this; } Stream build(); } }
Stream接口中有内部接口Builder,其继承关系如图所示
注解FunctionalInterface,作用用于标识函数式接口
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface FunctionalInterface {}
Consumer接口是一个函数式接口,
@FunctionalInterface public interface Consumer{ void accept(T t); default Consumer andThen(Consumer super T> after) { Objects.requireNonNull(after); return (T t) -> { accept(t); after.accept(t); }; } }
Builder接口
public interface BuilderPredicate接口extends Consumer { @Override void accept(T t); default Builder add(T t) { accept(t); return this; } Stream build(); }



