Функция высшего порядка с аргументом fn против вызова метода одноэлементного объекта

Я пытаюсь удалить дубликаты кода, используя функции высшего порядка.

Чем это отличается от вызова метода Singleton Object?

Образец кода:

filterDFForPaymentType(filterDF, df, "Manual")
filterDFForPaymentType(filterDF, df, "Electronic")

def filterDFForPaymentType(fn: (DataFrame, String) => DataFrame, df: DataFrame, paymentType: String) {
      fn(df, paymentType)
}

def filterDF(df: DataFrame, paymentType: String): DataFrame = {
      val filteredDF = df.where(col("paymenttypecol") === paymentType)
      filteredDF
}

Чем это отличается от вызова одной и той же функции с помощью метода объекта Singleton.

filterDFForPaymentType(UtilClass.filterDF(df, "Manual"))
filterDFForPaymentType(UtilClass.filterDF(df, "Electronic"))

Я уверен, что мы можем сделать гораздо больше, используя функции высшего порядка, но я не совсем понимаю.

Это какой-то правильный способ использования функций высшего порядка?

Может кто-нибудь дать мне ссылку для правильного использования функций высшего порядка с примерами?

1 ответ

Решение

Здесь у вас есть функция filterDFForPaymentType, которая не делает ничего, кроме как возвращает результат вашей другой функции, в этом случае код можно сократить до

filterDF(df, "Manual")
filterDF(df, "Electronic")
def filterDF(df: DataFrame, paymentType: String): DataFrame = {
      val filteredDF = df.where(col("paymenttypecol") === paymentType)
      filteredDF
}

Функции более высокого порядка полезны, когда они сами реализуют некоторую логику (то есть в коллекциях деконструкцию и конструирование коллекции), в то же время используя переданную функцию как ее часть. В случае, если необязательно будет использоваться переданная функция, может быть разница в производительности.

Другие вопросы по тегам