在
Haskell中有一个叫做map的函数,它使用A类的列表和一个函数f,将类型A的值映射到类型B的值.它返回一个类型B的列表,使得结果列表的每个元素来自调用f到输入列表中的值.
例如,给定
>一个列表m = [‘a’,’b’,’c’],
>和函数f = {‘a’ – > 1,’b’ – > 2,’c’ – > 3},
然后映射(m,f)= [1,2,3].
是否有可用于Java 7的图书馆,提供类似地图功能的图书?我已经看过apache CollectionUtils,发现了forAllDo和transform,但是它们不允许重新调整完全不同类型的集合.出于同样的原因,其他图书馆的Google搜索失败.
要明确:我知道如何自己解决这个问题,但我强烈地认为,必须已经有一个很好的图书馆来更好地执行这个任务.
奖金问题:有没有一些相当于Haskell函子(即从集合转到可迭代)可用于Java 7?进一步的解释:是否有一个地图函数,它需要一个可迭代的< A>而不是集合< A>并返回可替代的< B>而不是Collection< B> (由拟合函数f提供)?
解决方法
您要求Java 7(使用Java 8更容易):
您可以使用Guava,具体FluentIterable
final List<String> strings = Arrays.asList("a","b","c"); final List<Integer> integers = FluentIterable .from(strings) .transform(new Function<String,Integer>() { @Nullable @Override public Integer apply(@Nullable String input) { return input.equals("a") ? 1 : input.equals("b") ? 2 : input.equals("c") ? 3 : -1; } }) .toList();
奖金问题:集合是一个迭代:-)