Guava Lists.transform 或 Iterables.transform 可以带转换器吗?
Can Guava Lists.transform or Iterables.transform take a Converter?
通常 Guava Lists.transform
看起来像这样:
Lists.transform(new ArrayList<String>("1", "2", "3"),
new Function<String, Integer>() {
@Override
Integer apply(String str) {
return Integer.valueOf(str);
}
});
A Converter<A, B>
定义了从 A
到 B
和 B
到 A
的 doForward
和 doBackward
方法分别。逻辑上是一对Function
。看起来没有任何简单的方法可以
- 从
Converter
到描述它的 Function
对,或
- 输入一个
Converter
然后说一个方向进入Lists
方法
这些是否不兼容,或者除了手动编写胶水代码之外还有其他方法吗?
手动粘合代码看起来像
final Converter<A, B> myConverter = /*...*/;
Lists.transform(myList, new Function<A, B>() {
@Override
B apply(A a) {
return myConverter.doForward(a);
}
});
Guava 的 Converter
实现 Function
。所以就做
Lists.transform(myList, myConverter)
或
Lists.transform(myList, myConverter.reverse())
通常 Guava Lists.transform
看起来像这样:
Lists.transform(new ArrayList<String>("1", "2", "3"),
new Function<String, Integer>() {
@Override
Integer apply(String str) {
return Integer.valueOf(str);
}
});
A Converter<A, B>
定义了从 A
到 B
和 B
到 A
的 doForward
和 doBackward
方法分别。逻辑上是一对Function
。看起来没有任何简单的方法可以
- 从
Converter
到描述它的Function
对,或 - 输入一个
Converter
然后说一个方向进入Lists
方法
这些是否不兼容,或者除了手动编写胶水代码之外还有其他方法吗?
手动粘合代码看起来像
final Converter<A, B> myConverter = /*...*/;
Lists.transform(myList, new Function<A, B>() {
@Override
B apply(A a) {
return myConverter.doForward(a);
}
});
Guava 的 Converter
实现 Function
。所以就做
Lists.transform(myList, myConverter)
或
Lists.transform(myList, myConverter.reverse())