मेरा एक दोस्त के लिए कार्यात्मक शैली स्काला सबसे लंबे समय तक लाइन का ट्रैक एक फाइल में रखने के लिए सीख रहा है और लिखा है इस सरल कोड: बहुत स्काला के लिए नएइस स्काला कोड
val longest = (filename:String) => {
val is = new FileInputStream(filename)
val buf = new Array[Byte](1024)
var longest=0 //keep track of the longest line
var lastPos=0
var read=0
try {
read = is.read(buf)
while (read > 0) {
for (i<-0 until read) {
if (buf(i) == '\n') {
val size=i-lastPos-1
lastPos=i
if (size>longest) {
longest=size
}
}
}
lastPos-=buf.length
read=is.read(buf)
}
} finally {
is.close()
}
longest
}
मैं हूँ, लेकिन मैं ' मुझे यकीन है कि इस कोड में flatMaps और अन्य कार्यों के लिए बहुत सी जगह है।
क्या कोई इस का कार्यात्मक संस्करण पोस्ट कर सकता है?
मान्य रूप से 'maxBy' के साथ आपका समाधान मेरा, +1 से अधिक सुखद है। –
हैलो @ missingfaktor यह अधिक कुशल दिखता है नहीं है? मैं समझता हूं कि यह लाइनों को पढ़ने के दौरान '_.length' कोड लागू होता है लेकिन मुझे नहीं लगता कि यह अधिकतम की बजाय "लंबाई" क्यों देता है, यह नहीं होना चाहिए ... minby (_। Length) [0 ] 'या ऐसा कुछ? – OscarRyz
@ ऑस्कर: बेन का कोड उतना तेज़ होना चाहिए (दिया गया है कि 'गेटलाइन' एक पुनरावर्तक लौटाता है)। – missingfaktor