【发布时间】:2016-05-12 20:59:08
【问题描述】:
我被要求为一门课程将一些 Scala 代码“翻译”成 Java。但是,作业的要求是 Java 8 和外部库,例如 Functional Java 和 Totally Lazy,不允许。 Scala 中的行是:
charges.groupBy(_.cc).values.map(_.reduce(_ combine _)).toList
我已经能够写出groupBy 和values,但.map 和_.reduce 仍然无法使用。我查看了这两个库的源代码以及 Scala 源代码,试图找到一些可以帮助我将它们组合在一起的东西,但我没有取得任何进展。
GroupBy 实现如下:
public Map<CreditCard, List<Charge>> groupBy(List<Charge> list)
{
Map<CreditCard, List<Charge>> map = new TreeMap<CreditCard, List<Charge>>();
for(Charge c: list)
{
List<Charge> group = map.get(c.cc);
if(group == null)
{
group = new ArrayList();
map.put(c.cc, group);
}
group.add(c);
}
return map;
}
【问题讨论】:
-
我有点困惑,你能够实现 groupBy 和 values 但在 map 上苦苦挣扎。什么是逃避部分?
-
Values 可能没有正确实现,因为我使用了 map.values() ,但在这个例子中它给出了正确的结果。至于 map ......逃避的部分是传递函数作为参数和那种东西的事实。我想在 Java 中使用 JDK7 或更低版本找到 map() 实现,但没有找到通用实现。
-
groupBy也传入了一个函数。您刚刚忽略了这一点并直接使用了c.cc。如果groupBy可以接受,那么大概你可以做同样的 fprmap
标签: java scala functional-programming java-7