JavaRush /Blog Jawa /Random-JV /Ngopi #97. Ati-ati karo metode Opsional Jawa. Carane namp...

Ngopi #97. Ati-ati karo metode Opsional Jawa. Carane nampilake lan jumlah unsur saka dhaftar ing Jawa

Diterbitake ing grup

Ati-ati karo metode Opsional Jawa

Sumber: Dev.to Ngopi #97.  Ati-ati karo metode Opsional Jawa.  Cara nampilake lan jumlah unsur saka dhaptar ing Jawa - 1 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:
  1. Cocokake saben pesenan karo dhaptar produk.
  2. Tampilake rega kanggo saben produk.
  3. Nyimpulake kabeh rega kanthi nambahake bebarengan.
Dadi ayo padha nindakake ing Jawa:
public class OrderMapReducer {
    public BigDecimal getTotal(List<Order> orders) {
        return orders.stream() // 1
                     .map(Order::products) // 2
                     .flatMap(List::stream) // 3
                     .map(Product::price) // 4
                     .reduce(BigDecimal::add) // 5
                     .orElse(BigDecimal.ZERO); // 6
    }
}
  1. Kita nggawe aliran pesenan.
  2. Kita cocog saben pesenan karo dhaptar produk.
  3. Kita cocog karo saben dhaptar produk kanthi aliran. Elinga yen kita kudu nggunakake flatMap kene , yen ora, kita bakal mungkasi karo Stream <Stream <Produk>> .
  4. Kanggo saben produk kita nampilake regane.
  5. Ayo padha nyimpulake kabeh rega.
  6. 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 .
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION