Ati-ati karo metode Opsional Jawa
Sumber:
Dev.to Miturut Oracle, obyek
Opsional minangka "obyek wadhah sing bisa uga ora ngemot nilai non-null." Opsional pisanan muncul ing Java 8 lan wis digunakake dening tim SpringBoot ing akeh proyek.
Panggunaan Opsional sing paling umum ana ing proyek Spring Data. Ayo goleki antarmuka JpaRepository lan cara conto. Contone, kita duwe obyek
Panganggo kanthi Id jinis integer lan kita duwe JpaRepository.
@Repository
public interface IUserRepo extends JpaRepository<User, Integer>
{
Optional<User> findByUserName(String userName);
}
Kita wis nemtokake cara sing nggoleki pangguna kanthi jeneng lan ngasilake
Opsional kanggo
Panganggo .
Metode Trep Opsional
Opsional kalebu ing akeh cara sing ngidini kita nulis kode sing resik lan bisa diwaca.
- peta(..).utawa(...)
- peta(...).utawa liyane(...)
- dhaftar lengkap bisa ditemokaké ing dokumentasi Oracle .
Nanging, ana siji cara kanthi prilaku sing ora dikarepke mbebayani.
Ketemu metode orElse
Miturut dokumentasi Oracle:
public T orElse(T other)
Bali regane yen ana siji, digunakake bali mergo. Saiki kita bisa nambah panggilan metode minangka parameter
orElse sing bakal mbukak yen parameter
Opsional kosong, ta? Ya, iku bener, nanging apa yen aku marang sing bakal bisa tho, preduli saka apa ana Nilai ing
Opsional utawa ora. Ayo priksa:
@Test
public void orElseTest()
{
String result = Optional.of("hello").orElse(someMethod());
assertThat(result).isEqualTo("hello");
}
private String someMethod()
{
System.out.println("I am running !!");
return "hola";
}
Tes kasebut sukses, nanging sampeyan bakal weruh manawa baris "
Aku mlaku " dicithak ing konsol.
Yagene iki kedadeyan?
Jawa nganggo cara kanggo nyedhiyani nilai sing bakal bali ing cilik saka
Else .
Dadi sing ati-ati!
Sampeyan kudu ati-ati yen cara ing
orElse bisa duwe efek samping amarga isih bakal ditindakake.
Apa sing kudu ditindakake?
Sampeyan bisa nggunakake cara
OrElseGet , sing njupuk cara supplier kanggo eksekusi yen
Opsional ana .
Carane nampilake lan jumlah unsur saka dhaftar ing Jawa
Sumber:
DZone Ing kirim iki, sampeyan bakal sinau carane nampilake lan ngringkes jumlah unsur saka dhaptar ing Jawa. Pemetaan item saka Dhaptar
tegese saben item ing dhaptar kasebut bakal diowahi dadi obyek sing beda. Nyimpulake unsur saka dhaptar tegese kabeh unsur saka dhaptar kasebut bakal digabung dadi siji obyek, sing ora kudu padha karo sing asli. Ayo kita duwe dhaptar pesenan, lan saben pesenan duwe dhaptar produk.
record Order(String customer, List<Product> products) {
}
record Product(String brand, String modelName, BigDecimal price) {
}
Apa sing bakal sampeyan lakoni yen sampeyan pengin ngerti jumlah dhuwit sing teka saka dhaptar pesenan? Kanggo saben pesenan, sampeyan kudu entuk dhaptar produk sing ana ing kono, lan kanggo saben produk ing dhaptar kasebut, sampeyan kudu entuk biaya. Sawise iku, sampeyan kudu nyimpulake kabeh rega kasebut, lan iki carane sampeyan entuk asil. Nalika nerjemahake ing ndhuwur menyang
Peta /
Ngurangi sampeyan kudu:
- Cocokake saben pesenan karo dhaptar produk.
- Tampilake rega kanggo saben produk.
- Nyimpulake kabeh rega kanthi nambahake bebarengan.
Dadi ayo padha nindakake ing Jawa:
public class OrderMapReducer {
public BigDecimal getTotal(List<Order> orders) {
return orders.stream()
.map(Order::products)
.flatMap(List::stream)
.map(Product::price)
.reduce(BigDecimal::add)
.orElse(BigDecimal.ZERO);
}
}
- Kita nggawe aliran pesenan.
- Kita cocog saben pesenan karo dhaptar produk.
- Kita cocog karo saben dhaptar produk kanthi aliran. Elinga yen kita kudu nggunakake flatMap kene , yen ora, kita bakal mungkasi karo Stream <Stream <Produk>> .
- Kanggo saben produk kita nampilake regane.
- Ayo padha nyimpulake kabeh rega.
- Yen Dhaftar Pesenan kosong , bali nol.
Iku kabeh! Saiki kita bisa nggawe tes kanggo mesthekake yen kabeh bisa digunakake kaya sing dikarepake.
@Test
void getTotalPrice() {
List<Order> orders = createOrders();
OrderMapReducer orderMapReducer = new OrderMapReducer();
assertEquals(new BigDecimal(17800), orderMapReducer.getTotal(orders));
}
private static List<Order> createOrders() {
var strato = new Product("Fender", "Stratocaster", new BigDecimal(3500));
var sg = new Product("Gibson", "SG", new BigDecimal(4800));
var lesPaul = new Product("Gibson", "Les Paul", new BigDecimal(4500));
var rr = new Product("Jackson", "RR", new BigDecimal(5000));
return List.of(
new Order("David Gilmour", List.of(strato)),
new Order("Toni Iommi", List.of(sg)),
new Order("Randy Rhoads", List.of(lesPaul, rr))
);
}
Kaya sing sampeyan ngerteni, Map and Reduce mbantu yen sampeyan kudu njupuk informasi saka
Koleksi .
GO TO FULL VERSION