[英]Scala to Java (functional programming)
我被要求將一些Scala代碼“翻譯”為Java,以完成一門課程。 但是,分配的要求是不允許 Java 8和外部庫,例如Functional Java和Totally Lazy 。 Scala中的行是:
charges.groupBy(_.cc).values.map(_.reduce(_ combine _)).toList
我已經能夠編寫groupBy
和values
但是.map
和_.reduce
仍然使我_.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;
}
您可以為此使用Google Guava 。 它不需要java8。 您對調用FluentIterable
類特別感興趣。 以下是一些可以幫助您的方法:
還有很多。
您必須迭代這些值。 通常,我建議使用一種新for
循環樣式。 就像是:
for (ValuesType value : values) {
// do your map and reduce here
}
這樣做的問題是您一次需要訪問多個值。 (見的討論.reduce()
下文。)因此,也許老風格for
效果會更好:
for (int i = 0; i < values.length - 1; i++) {
// do something with values.get(i) or values[i] as needed
}
指向思考:為什么values.length - 1
?
.map()
只是將一件事轉換為另一件事。 在這種情況下會發生什么變化? 這是.reduce()
! 因此,這應該很容易。
_.reduce()
的_
等同於上述for
語句中的value
。 這是您在此迭代中要處理的一個值。
.reduce()
接受兩個值,並對它們執行某些操作以將它們轉換為單個值。 為了使該工作有效,您需要以某種方式處理values.get(i)
和values.get(i+1)
。 和_ combine _
,好吧,你告訴我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.