JavaRush /Blog Jawa /Random-JV /Ngopi #163. Apa bedane antarane lambda lan referensi meto...

Ngopi #163. Apa bedane antarane lambda lan referensi metode. 5 Cara Nggabungake String Null ing Jawa

Diterbitake ing grup

Apa bedane antarane lambda lan referensi metode

Sumber: Reddit IntelliJ IDEA nyaranake ngganti ekspresi lambda kanthi referensi metode. Apa bedane? Ngopi #163.  Apa bedane antarane lambda lan referensi metode.  5 Cara Nggabungake String Null ing Jawa - 1Pranyata ana prabédan subtle antarane ekspresi lambda lan referensi metode. Contone, mbandhingaké: myInstance :: getStuff lan () ->myInstance.getStuff () . Umumé, loro opsi padha karo saben liyane. Nanging yen myInstance null, lan lambda ngasilake null pointer nalika ngevaluasi lambda, banjur referensi cara bakal kui langsung nalika nyoba kanggo ngakses referensi. Lan apa? Umumé, iki penting yen kode sing ngevaluasi ekspresi lambda ana ing njero coba-cekel kanthi null pointer. Contone, aku duwe fungsi mightBeNull (fungsi Supplier<T>) sing nindakake kaya iki:
try {
    doStuff(function.get().getSomeMore().getSomeMore());
} catch (NullPointerException e) {
    doOtherStuff();
}
Yen nelpon mightBeNull (() -> myNullVariable.getStuff ()) bakal bisa tanpa mbuwang pangecualian, banjur "padha": mightBeNull (myNullVariable :: getStuff) bakal uncalan NullPointerException langsung nalika fungsi disebut. Mangkono bedane. Cathetan. Miturut Stackoverflow, yen sampeyan ngganti lambda kanthi referensi metode, bytecode kelas bakal luwih kompak, tegese kelas bakal mbukak luwih cepet menyang JVM. Nanging, kanggo nemu gain kuwi, ewu lambdas unoptimized dibutuhake. Nanging, ing proyek gedhe, nomer kasebut bisa gampang dikumpulake. Yen ora, pilihan antarane lambda lan referensi metode yaiku masalah rasa lan keterbacaan kode. Contone, yen lambda duwe sawetara baris, maca bisa suda, lan kode mung bakal entuk manfaat yen lambda diselehake ing cara kapisah lan referensi kanggo digunakake.

5 Cara Nggabungake String Null ing Jawa

Sumber: Gitconnected Sawise maca kirim iki, sampeyan bakal sinau luwih akeh cara kanggo nggarap string ing Jawa. Jawa menehi akeh cara kanggo concatenate strings, nanging kadhangkala nalika kita ora mbayar manungsa waé kanggo strings null, kita bisa mungkasi munggah karo null, kang temenan ora apa kita arep. Dadi gunakake metode sing disaranake kanggo ngindhari nilai null nalika nggabungake String.

Analisis Masalah

Yen kita pengin nggabungake array string, kita mung bisa nggunakake operator +. Nanging, kita bisa nemokake nilai null nalika nindakake iki .
String[] values = {"https", "://", "gist.", "github", ".com", null};
String result = "";

for (String value : values) {
    result = result + value;
}
Nggabungake kabeh unsur iki ndadékaké kita kanggo asil iki:
https://gist.github.comnull
Senajan kita ketemu masalah, asil Nilai null uga concatenated minangka senar, kang cetha ora apa kita padha ngarep-arep. Lan sanajan kita digunakake ing Jawa 8 utawa luwih, nggunakake String.join statis () cara kanggo nggabungake strings, kita isih bakal mungkasi munggah karo nilai null .
String[] values = {"https", "://", "gist.", "github", ".com", null};
String result = String.join("", values);
Hasile padha:
https://gist.github.comnull
Dadi carane ngatasi masalah iki? Ana sawetara solusi. Kanggo nggawe luwih gampang kanggo nduduhake kode mengko, kita extract cara sing bisa pass senar lan bali senar non-null.
public String nullToString(String value) {
    return value == null ? "" : value;
}

1. String.concat()

String.concat () iku cara sing nerangake karo kelas String . Iku trep banget kanggo concatenation senar.
for (String value : values) {
    result = result.concat(getNonNullString(value));
}
Amarga metode nullToString() diarani, ora ana nilai null minangka asil .

2. StringBuilder

Kelas StringBuilder nyedhiyakake akeh cara sing migunani lan trep kanggo mbangun senar. Sing paling umum digunakake ing antarane iku append () cara , kang nggunakake append () kanggo concatenate strings lan digabungake karo nullToString () cara kanggo ngindhari nilai null .
String[] values = {"https", "://", "gist.", "github", ".com", null};
StringBuilder result = new StringBuilder();

for (String value : values) {
    result = result.append(nullToString(value));
}
Akibaté, sampeyan bisa entuk asil ing ngisor iki:
https://gist.github.com

3. Kelas StringJoiner (Jawa 8+)

Kelas StringJoiner nyedhiyakake fungsi sing luwih kuat kanggo nggabungake senar. Ora mung bisa nemtokake delimiter sajrone concatenation, nanging uga nemtokake prefiks lan sufiks. Nalika concatenating strings, kita bisa nggunakake cara nambah () sawijining . Metode nullToString () uga bakal digunakake ing kene kanggo nyegah nilai null .
String[] values = {"https", "://", "gist.", "github", ".com", null};
StringJoiner result = new StringJoiner("");

for (String value : values) {
    result = result.add(nullToString(value));
}

4. Streams.filter (Jawa 8+)

Stream API minangka kelas operasi stream sing kuat sing dikenalake ing Java 8 sing bisa nindakake panyaring standar, cocog, traversal, klompok, statistik, lan operasi liyane.
  • Filter operasi panyaring bisa nampa fungsi Predikat .
  • Antarmuka fungsi Predikat padha karo antarmuka Fungsi sing ditepungake sadurunge.
  • Iki minangka antarmuka fungsional.
  • Bisa njupuk parameter umum <T> lan nilai bali minangka jinis Boolean.
  • Predikat asring digunakake kanggo nyaring data .
Supaya kita bisa nemtokake Predikat kanggo mriksa string null lan pass menyang Filter () cara saka API Stream. Tambahan, sampeyan bisa nggunakake Collectors.joining () cara kanggo nggabungake strings non-null isih.
String[] values = {"https", "://", "gist.", "github", ".com", null};

String result = Arrays.stream(values)
    .filter(Objects::nonNull)
    .collect(Collectors.joining());

5. Gunakake operator +

Nggunakake operator + uga bisa ngatasi masalah, nanging ora dianjurake. Kita ngerti manawa String minangka obyek sing ora bisa diganti. Nggunakake tandha + asring nggawe obyek senar, lan saben-saben senar anyar digawe ing memori, supaya konsumsi kinerja nggunakake tandha + kanggo concatenate strings dhuwur banget.

Kesimpulan

Artikel iki nyedhiyakake sawetara cara kanggo nggabungake senar lan nangani NULL, sing bisa uga ana cara sing beda kanggo skenario sing beda. Analisis nuduhake yen kinerja StringBuilder paling apik. Nanging ing kahanan nyata, sampeyan kudu gabungke skenario tartamtu lan banjur milih cara karo mundhut kinerja paling.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION