加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

相当于Java 7中的map(from haskell)

发布时间:2020-12-14 05:34:18 所属栏目:Java 来源:网络整理
导读:在 Haskell中有一个叫做map的函数,它使用A类的列表和一个函数f,将类型A的值映射到类型B的值.它返回一个类型B的列表,使得结果列表的每个元素来自调用f到输入列表中的值. 例如,给定 一个列表m = [‘a’,’b’,’c’], 和函数f = {‘a’ – 1,’b’ – 2,’c’
在 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();

奖金问题:集合是一个迭代:-)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读