JavaRush /Java Blog /Random-ID /Rehat kopi #163. Apa perbedaan antara lambda dan referens...

Rehat kopi #163. Apa perbedaan antara lambda dan referensi metode. 5 Cara Menggabungkan String Null di Java

Dipublikasikan di grup Random-ID

Apa perbedaan antara lambda dan referensi metode

Sumber: Reddit IntelliJ IDEA menyarankan untuk mengganti ekspresi lambda dengan referensi metode. Apa perbedaan di antara keduanya? Rehat kopi #163.  Apa perbedaan antara lambda dan referensi metode.  5 Cara Menggabungkan String Null di Java - 1Ternyata ada perbedaan halus antara ekspresi lambda dan referensi metode. Misalnya, bandingkan: myInstance::getStuff dan () ->myInstance.getStuff() . Secara umum, kedua opsi tersebut setara satu sama lain. Namun jika myInstance adalah null, dan lambda menghasilkan pointer null saat mengevaluasi lambda, maka referensi metode akan segera dibuat saat mencoba mengakses referensi tersebut. Dan apa? Secara umum, ini penting jika kode yang mengevaluasi ekspresi lambda berada di dalam try-catch dengan pointer nol. Misalnya, saya memiliki fungsi mightBeNull(Supplier<T> function) yang melakukan sesuatu seperti ini:
try {
    doStuff(function.get().getSomeMore().getSomeMore());
} catch (NullPointerException e) {
    doOtherStuff();
}
Jika pemanggilan mightBeNull(() -> myNullVariable.getStuff()) akan berhasil tanpa memberikan pengecualian, maka “equivalent”: mightBeNull(myNullVariable::getStuff) akan langsung memunculkan NullPointerException saat fungsi tersebut dipanggil. Itulah perbedaannya. Catatan. Menurut Stackoverflow, jika Anda mengganti lambda dengan referensi metode, bytecode kelas akan lebih kompak, yang berarti kelas akan memuat lebih cepat ke dalam JVM. Namun, untuk mendapatkan keuntungan seperti itu, diperlukan ribuan lambda yang tidak dioptimalkan. Namun, dalam proyek besar, jumlah tersebut dapat dengan mudah diakumulasikan. Jika tidak, pilihan antara lambda dan referensi metode bergantung pada selera dan keterbacaan kode. Misalnya, jika lambda memiliki beberapa baris, maka keterbacaan berkurang, dan kode hanya akan bermanfaat jika lambda ditempatkan dalam metode terpisah dan referensi ke sana digunakan.

5 Cara Menggabungkan String Null di Java

Sumber: Gitconnected Setelah membaca posting ini, Anda akan mempelajari lebih banyak cara bekerja dengan string di Java. Java menyediakan banyak cara untuk menggabungkan string, tetapi terkadang ketika kita tidak memperhatikan string null, kita bisa mendapatkan null, yang jelas bukan yang kita inginkan. Jadi gunakan metode yang saya rekomendasikan untuk menghindari nilai null saat menggabungkan String.

Analisa masalah

Jika kita ingin menggabungkan array string, kita cukup menggunakan operator +. Namun, kami mungkin menemukan nilai nol saat melakukan ini .
String[] values = {"https", "://", "gist.", "github", ".com", null};
String result = "";

for (String value : values) {
    result = result + value;
}
Menggabungkan semua elemen ini membawa kita pada hasil ini:
https://Gist.github.comnull
Meskipun kami menemukan masalahnya, nilai null yang dihasilkan juga digabungkan sebagai string, yang jelas bukan yang kami harapkan. Dan bahkan jika kita bekerja pada Java 8 atau lebih tinggi, menggunakan metode statis String.join() untuk menggabungkan string, kita masih akan mendapatkan nilai nol .
String[] values = {"https", "://", "gist.", "github", ".com", null};
String result = String.join("", values);
Hasilnya sama:
https://Gist.github.comnull
Lalu bagaimana cara mengatasi masalah ini? Ada beberapa solusi. Untuk mempermudah mendemonstrasikan kodenya nanti, kami mengekstrak metode yang dapat meneruskan string dan mengembalikan string non-null.
public String nullToString(String value) {
    return value == null ? "" : value;
}

1. String.concat()

String.concat() adalah metode yang disertakan dengan kelas String . Sangat nyaman untuk penggabungan string.
for (String value : values) {
    result = result.concat(getNonNullString(value));
}
Karena metode nullToString() dipanggil, hasilnya tidak ada nilai null .

2.Pembangun String

Kelas StringBuilder menyediakan banyak metode yang berguna dan nyaman untuk membuat string. Yang paling umum digunakan di antaranya adalah metode append() , yang menggunakan append() untuk menggabungkan string dan digabungkan dengan metode nullToString() untuk menghindari nilai null .
String[] values = {"https", "://", "gist.", "github", ".com", null};
StringBuilder result = new StringBuilder();

for (String value : values) {
    result = result.append(nullToString(value));
}
Hasilnya, Anda bisa mendapatkan hasil berikut:
https://Gist.github.com

3. Kelas StringJoiner (Java 8+)

Kelas StringJoiner menyediakan fungsi yang lebih kuat untuk menggabungkan string. Itu tidak hanya dapat menentukan pembatas selama penggabungan, tetapi juga menentukan awalan dan akhiran. Saat menggabungkan string, kita dapat menggunakan metode add() -nya . Metode nullToString() juga akan digunakan di sini untuk menghindari nilai null .
String[] values = {"https", "://", "gist.", "github", ".com", null};
StringJoiner result = new StringJoiner("");

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

4. Aliran.filter (Java 8+)

Stream API adalah kelas operasi aliran canggih yang diperkenalkan di Java 8 yang dapat melakukan pemfilteran standar, pencocokan, traversal, pengelompokan, statistik, dan operasi lainnya.
  • Filter operasi filter dapat menerima fungsi Predikat .
  • Antarmuka fungsi Predikat sama dengan antarmuka Fungsi yang diperkenalkan sebelumnya.
  • Ini adalah antarmuka fungsional.
  • Ini dapat mengambil parameter generik <T> dan nilai yang dikembalikan adalah tipe Boolean.
  • Predikat sering digunakan untuk menyaring data .
Jadi kita dapat mendefinisikan Predikat untuk memeriksa string null dan meneruskannya ke metode filter() dari Stream API. Selain itu, Anda dapat menggunakan metode Collectors.joining() untuk menggabungkan string non-null yang tersisa.
String[] values = {"https", "://", "gist.", "github", ".com", null};

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

5. Gunakan operator +

Menggunakan operator + juga dapat menyelesaikan masalah, namun tidak disarankan. Kita tahu bahwa String adalah objek yang tidak dapat diubah. Penggunaan tanda + sering kali membuat objek string, dan setiap kali string baru dibuat di memori, sehingga konsumsi kinerja penggunaan tanda + untuk menggabungkan string sangat tinggi.

Kesimpulan

Artikel ini menyajikan beberapa metode untuk menggabungkan string dan menangani NULL, yang mana metode berbeda mungkin cocok untuk skenario berbeda. Analisis menunjukkan bahwa performa StringBuilder adalah yang terbaik. Namun dalam kondisi nyata, Anda perlu menggabungkan skenario tertentu dan kemudian memilih metode dengan kehilangan kinerja paling kecil.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION