标签:
1. 接口可以有默认方法. 这样做是为了兼容性方面的考虑;例如java想在新版本中为集合类的接口添加一写新方法,如果不提供默认实现,则所有的子类都必须实现这些新方法.
但是, 不可以为Object的任何方法提供实现;
public default void forEach(Consumer<? super T> action) { Objects.requireNonNull(action); for (T t : this) { action.accept(t); } }
2. Lambda 表达式.通过下面的例子看看Lambda怎么简化代码:
List<String> names = Arrays.asList("peter", "anna", "mike", "xenia"); Collections.sort(names, new Comparator<String>() { @Override public int compare(String a, String b) { return b.compareTo(a); } }); Collections.sort(names, (String a, String b) -> { return b.compareTo(a); }); Collections.sort(names, (String a, String b) -> b.compareTo(a)); //甚至可以没有类型 java会自己推倒类型 Collections.sort(names, (a, b) -> b.compareTo(a));
3. 函数式接口, 只包含一个抽象方法的接口称之为函数式接口;可以动态为函数式接口提供实现:@FunctionalInterface会使编译器作强化检查;
@FunctionalInterface interface Converter<F, T> { T convert(F from); } Converter<String, Integer> converter = (from) -> Integer.valueOf(from); Integer converted = converter.convert("123"); System.out.println(converted); // 123
4. 增强的集合类方法:
Iterable.forEach(Consumer)
Iterator.forEach(Consumer)
Collection.removeAll(Predicate)
Collection.spliterator()
Collection.stream()
Collection.parallelStream()
List.sort(Comparator)
Map.forEach(BiConsumer)
Map.replaceAll(BiFunction)
Map.putIfAbsent(K, V)
Map.remove(Object, Object)
Map.replace(K, V, V)
Map.replace(K, V)
Map.computeIfAbsent(K, Function)
Map.computeIfPresent(K, BiFunction)
Map.compute(K, BiFunction)
Map.merge(K, V, BiFunction)
Map.getOrDefault(Object, V)
标签:
原文地址:http://www.cnblogs.com/sunxing007/p/4568792.html