JavaRush /Blog Jawa /Random-JV /Ngilangake gelung ing basa Jawa 8
KapChook
tingkat
Volga

Ngilangake gelung ing basa Jawa 8

Diterbitake ing grup
Gaya fungsional sing dikenalake ing Jawa 8 minangka tambahan sing apik kanggo basa kasebut. Saiki Jawa dudu OOP murni, saiki dadi hibrida saka OOP lan pemrograman fungsional. Iki minangka pangowahan game lan kita kudu ngganti otak OOP kanggo nyerep owah-owahan kasebut. Ngilangake gelung ing basa Jawa 8-1Nanging kenapa kita kudu nampa owah-owahan kasebut? Yagene kita kudu mbuwang wektu nyoba kanggo njaluk bebarengan karo gaya fungsi nalika kita bisa ngatasi masalah nggunakake OOP murni?
  • Gaya fungsional sing dienalake ing Jawa 8 mbantu nyuda jurang antarane logika bisnis lan kode. Iki ngidini kita nyritakake crita kanthi aliran alami ing tingkat sing luwih dhuwur. Tinimbang ngomong carane arep nindakake, sampeyan bisa ngomong apa sing arep kanggo nindakake.

  • Kode dadi luwih resik lan luwih ringkes.

  • Fungsi urutan dhuwur ngidini kita:

    • Kirimi fungsi menyang fungsi liyane
    • Nggawe fungsi ing fungsi liyane
    • Wangsulake fungsi saka fungsi liyane

    Iki minangka kamenangan gedhe kanggo Jawa, ing ngendi kita kudu ngirim, nggawe, lan ngasilake obyek kanggo nindakake iki. Kita bakal bisa nulis kode sing luwih dipercaya, fokus, lan luwih gampang digunakake maneh.

  • Thanks kanggo lambdas, kita bisa nindakake petungan males. Nalika ekspresi lambda dikirim minangka argumen metode, kompiler bakal ngevaluasi nalika diarani metode kasebut. Iki beda karo argumen metode normal, sing langsung dievaluasi.

  • Lambdas nggawe tes unit nulis nyenengake. Dheweke ngidini kita nggawe tes entheng sing resik, ukurane cilik, lan cepet nulis. Kita bisa ROOT kode ing test nggunakake lambdas. Iki ngidini kita nyoba carane kabeh jinis skenario bakal mengaruhi kode.

  • Pola anyar kanggo sinau.

  • Lan akeh liyane!

Nanging cukup banyu, ing artikel iki kita bakal nliti solusi alternatif kanggo siklus tradisional. Mesthi, siklus fleksibel, nanging iki ora teka tanpa rega. break, dramatically ngganti prilaku daur ulang, meksa kita ngerti ora mung apa kode nyoba kanggo entuk, continuenanging returnuga kanggo ngerti carane daur ulang bisa. Saiki kita bakal ndeleng kepiye carane bisa ngowahi puteran dadi kode sing luwih ringkes lan bisa diwaca.

Ayo coding diwiwiti!

Kita bakal nggarap artikel. Artikel nduweni judhul, penulis lan sawetara tag.
private class Article {

    private final String title;
    private final String author;
    private final List<String> tags;

    private Article(String title, String author, List<String> tags) {
        this.title = title;
        this.author = author;
        this.tags = tags;
    }

    public String getTitle() {
        return title;
    }

    public String getAuthor() {
        return author;
    }

    public List<String> getTags() {
        return tags;
    }
}
Saben conto bakal ngemot solusi tradisional nggunakake puteran lan solusi nggunakake fitur anyar Jawa 8. Ing conto pisanan, kita pengin nemokake artikel pisanan ing koleksi kanthi tag "Jawa". Ayo goleki solusi kanthi nggunakake loop.
public Article getFirstJavaArticle() {

    for (Article article : articles) {
        if (article.getTags().contains("Java")) {
            return article;
        }
    }
    return null;
}
Saiki ayo ngrampungake masalah kasebut nggunakake operasi saka Stream API.
public Optional<Article> getFirstJavaArticle() {
    return articles.stream()
        .filter(article -> article.getTags().contains("Java"))
        .findFirst();
    }
Apik banget, ta? Pisanan kita nggunakake operasi filterkanggo nemokake kabeh artikel kanthi tag "Jawa", banjur kita gunakake findFirst()kanggo entuk kedadeyan pisanan. Wiwit stream kesed lan saringan ngasilake stream, pendekatan iki mung bakal ngolah unsur nganti nemokake pertandhingan pisanan. Saiki ayo entuk kabeh artikel sing diwenehi tag "Jawa" tinimbang mung sing pisanan. Kaping pisanan, solusi nggunakake puteran.
public List<Article> getAllJavaArticles() {

    List<Article> result = new ArrayList<>();

    for (Article article : articles) {
        if (article.getTags().contains("Java")) {
            result.add(article);
        }
    }
    return result;
}
Solusi nggunakake operasi stream.
public List<Article> getAllJavaArticles() {
    return articles.stream()
        .filter(article -> article.getTags().contains("Java"))
        .collect(Collectors.toList());
    }
Ing conto iki, kita nggunakake operasi collectkanggo shorten stream asil, tinimbang wara-wara koleksi lan tegas nambah entri sing cocog. Nganti saiki apik. Wektu kanggo conto sing bakal nggawe Stream API pancen sumunar. Ayo klompok kabeh artikel miturut penulis. Kaya biasane, kita miwiti kanthi ngrampungake kanthi nggunakake puteran:
public Map<String, List<Article>> groupByAuthor() {

    Map<String, List<Article>> result = new HashMap<>();

    for (Article article : articles) {
        if (result.containsKey(article.getAuthor())) {
            result.get(article.getAuthor()).add(article);
        } else {
            ArrayList<Article> articles = new ArrayList<>();
            articles.add(article);
            result.put(article.getAuthor(), articles);
        }
    }
    return result;
}
Apa kita bisa nemokake solusi sing resik kanggo masalah iki nggunakake operasi stream?
public Map<String, List<Article>> groupByAuthor() {
    return articles.stream()
        .collect(Collectors.groupingBy(Article::getAuthor));
}
apik tenan! Kanthi nggunakake operasi groupingBylan referensi metode getAuthor(), kita entuk kode sing resik lan bisa diwaca. Saiki ayo goleki tag liyane sing digunakake ing koleksi kasebut. Ayo dadi miwiti karo conto loop:
public Set<String> getDistinctTags() {

    Set<String> result = new HashSet<>();

    for (Article article : articles) {
        result.addAll(article.getTags());
    }
    return result;
}
Oke, ayo goleki carane ngatasi iki kanthi nggunakake operasi stream:
public Set<String> getDistinctTags() {
    return articles.stream()
        .flatMap(article -> article.getTags().stream())
        .collect(Collectors.toSet());
}
Kelangan! flatmapmbantu kita flatten dhaftar tag menyang stream asil siji, kang banjur digunakake collectkanggo nggawe pesawat bali.

Kemungkinan tanpa wates

Iki minangka conto 4 babagan carane puteran bisa diganti karo kode sing luwih bisa diwaca. Priksa manawa sampeyan mriksa Stream API, amarga artikel iki mung ngeruk permukaan. Nguwasani gaya fungsional anyar Jawa bakal dadi tantangan kanggo pangembang OOP, nanging tantangan sing kudu ditampa kanthi apik. Aku bakal luwih maju lan ujar manawa sampeyan kudu sinau basa pemrograman fungsional sing murni. Kanthi cara iki sampeyan bisa ngerti kanthi lengkap kemampuan lan daya sing diwenehake. Aku mikir iki bakal mbantu sampeyan ngerti program fungsional ing tingkat sing beda. Dadi sinau program fungsional bebarengan karo OOP lawas sing apik, lan gunakake loro kasebut kanggo nulis kode sing luwih gedhe! Campuran terjemahan gratis saka rong artikel - Napa sampeyan kudu ngetrapake pemrograman fungsional ing Java 8 lan Swerving Away from Loops in Java 8
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION