我经常想将一个列表映射到另一个列表。例如,如果我有一个人列表,并且想要一个人名列表,我想这样做:
目标
List<Person> people = ... ;
List<String> names = people.map(x -> x.getName());
Java 8可能会发生以下情况:
JAVA 8版本
List<String> names = people.stream()
.map(x -> x.getName())
.collect(Collectors.toList());
但这显然不是那么好。实际上,我认为使用番石榴更干净:
番石榴版本
List<String> names = Lists.transform(people, x -> x.getName());
但是,我喜欢链接。那么,我的目标有可能吗?
我听说有人说Java 8的默认方法类似于C#扩展方法。使用C#扩展方法,我可以轻松地将辅助方法添加到IEnumerable<T>
:
public static IEnumerable<TRet> Map<T, TRet>(this IEnumerable<T> list, Func<T, TRet> selector)
{
return list.Select(selector);
}
但是我不知道如何使用默认方法扩展现有接口。
同样,这显然是一个简单的例子。通常,我希望能够扩展List<T>
和Iterable<T>
接口,以更轻松地与流api进行交互。
没有; 你不能那样做。
默认方法与扩展方法不同。它们只能在原始接口中定义。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句