JAva 8のlambda

2039 ワード

以前の年:0
scalaを使ったことがあって、javaを使って、いつも冗長でダラダラしたjavaに耐えられませんが、scalaはどこでも使えるわけではありません.javaという武器はやはり使わなければなりません.JAva 8の後にlamdbaを導入し、ナイフがより使いやすくなりました.冗談を言って、lambdaを使った後、コードは1/3少なくすることができて、葛藤する匿名のクラスが少なくなって、冗長for循環とifが少なくなりました..else.簡潔なlamdba式、強力なstreamApi、強化版interfaceが増えました.数年来、Assemblerモードは必ず少なくなくてはいけなくて、変化を隔離するために、POとDTOの転化で、POとModelの転化で、重複コードを減らしてやっと品質を高めることができます.匿名はずっと前に突き進み、静的な方法+無数の匿名Callbackが隅々に広がっている.閉包の到来はこのような状況を緩和し、刀はもっと軽くなった.少し重いですが、cの関数ポインタに及ばないほど、少なくともパッケージがよく、応用面で使いやすいです.
forサイクルとif...elseはただ茫漠とした海の中で、心の中のあなたを見つけるためです.
  public List filterXXX(List beFinds){
        if(beFinds == null || beFinds.isEmpty()){
            return null;
        }
        List founds = new ArrayList();
        for(String s:beFinds){
            if(....){
                founds.add(s);
            }
        }
        return founds;
        
    }

このようなコードは、手の中で何回弾いたか分からない!このようなコードを書くたびに葛藤し、StreamApiがない時代はGoogleGuavaで緩和するしかない.このようなコードを読むたびに、私はその意味を読むことができます.このようなコードを変更するたびに、間違いがないことを祈っています.StreamAPIは最も強力なツールではなく、scalaほどよくありませんが、javaerがコードを最適化し、よりよく読み、よりよく修正するのに十分です.千言万語化成:
    beFinds.stream().filter(s->{...}).collect(Collectors.toList());

拡張版のinterfaceはデフォルトの方法を追加しただけですが、翼を追加して、インタフェースの意味をより豊かにするのは間違いありません.scalaのtraitに似ていますが.従来の方法では、Durationインタフェースを定義します.
public interface Duration {
    Date getEndTime();
    Date getBeginTime();
}

関連する論理は実装クラスでしか実現できないが,defaultメソッドの到来は,
public interface Duration {
    Date getEndTime();
    Date getBeginTime();
    public default boolean contains(Date d){
        return getBeginTime().before(d) && d.before(getBeginTime());
    }
    public default Long interval(){
        return getEndTime().getTime()-getBeginTime().getTime();
    }
}

このようなインタフェースこそ生命があり、多彩な行為があり、名実ともにインタフェースであり、単なる概念の表現ではない.さらに,抽象クラスの役割が弱まり,インタフェースクラスが大幅に強化される.その導入は、多くの継承の問題を引き起こすかもしれませんが、これらは問題ではありません.結局、良い刀が磨かれた後も、大侠が磨かれる時間が必要です!!