簡體   English   中英

Scala到Java(功能編程)

[英]Scala to Java (functional programming)

我被要求將一些Scala代碼“翻譯”為Java,以完成一門課程。 但是,分配的要求是不允許 Java 8和外部庫,例如Functional JavaTotally Lazy Scala中的行是:

charges.groupBy(_.cc).values.map(_.reduce(_ combine _)).toList

我已經能夠編寫groupByvalues但是.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類特別感興趣。 以下是一些可以幫助您的方法:

  • index(Function keyFunction)-用於產生每個值的鍵的函數
  • transform(Function function)-將{@code function}應用於此流利的可迭代對象的每個元素

還有很多。

您必須迭代這些值。 通常,我建議使用一種新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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM