[TIL] 2021. 02.22


▼理想のJava-ストリーム(stream)]


1.匿名レベルではなくランダを使用します。


  • 関数オブジェクト(function object):抽象メソッドのみを含むインタフェース

  • ラムダのすべてのパラメータタイプは、タイプが明確になってからコードがより明確になった場合にのみ省略できます.

  • コード自体の動作が明確でなければ、コード行が長すぎます.ラムダさん.

  • 匿名クラスとしてcomparerを使用する
  • 	Collections.sort(word, new Comparator<String>() {
        	public int compare(String s1, String s2) {
            	return Integer.compare(s1.length(), s2.length());
            }
        }
  • (推奨)ランムティーを関数オブジェクトとして使用する
  • 	Collections.sort(words,
        	(s1, s2) -> (Integer.compare(s1.length(), s2.length()));
  • を使用してプログラム作成方法またはListインタフェースを追加する方法
  • を比較する.
    	//비교자 생성 메서드 사용하기
    	Collections.sort(words, comparingInt(String::length));
        	//List 인터페이스에 추가된 sort 메서드
    	words.sort(comparingInt(String::length));
  • Enumは、クラスを定数に配置するよりも、列挙タイプにインスタンスフィールドを配置する方がよい.
  •     //상수별 클래스 두는 방법
        public enum Operator {
    	PLUS("+") {
        	   public double apply(double x, double y) { return x + y;};
            }
         	private final String symbol;
         	Operation (String symbol) { this.symbol = symbol;}
    
         	public abstract double apply(double x, double y);
        }
        // 함수 객체(람다)를 인스턴스 필드에 저장해 상수별 동작을 구현한 열거 타입
        public enum Operator {
    		PLUS("+", (x, y) -> x + y); 	
    		
     	   private final String symbol;
        	   private final DoubleBinaryOperator op;
           
        	Operation (String symbol, DoubleBinaryOperator op {
          		this.symbol = symbol;
            	this.op = op;
        	}
           
     	public double apply (double x, double y) {
        		return op.applyAsDouble(x, y);
        	}
        }
          

    2.Ramdaではなくメソッド参照を使用します。

  • ランダよりも簡潔にする方法:メソッドリファレンス(Method Reference)
  • の利点:良い名前をつけることができて、親切な説明を書類として残すことができます.
  • パラメータの数が増えるにつれて、メソッド参照として削除できます.
  •     //람다
        map.merge(key, 1, (count, incr) -> count + incr);
       
        //메서드 참조
        map.merge(key, 1, Integer::sum);
  • ランダは、方法の参照よりも簡潔である場合がある
  •    //메서드 참조
       service.execute(GoshThisClassNameIsHumongous::action);
       //람다 
       service.execute(() -> action());
  • メソッド参照の5種類
  • メソッド参照タイプのサンプル機能を持つram多機能Integer::ParseInstr->Integer.Int(str)定義(インスタンス)Integerを解析します.now()::isAfterInstant then = Instant.now();非限定(インスタンス)String::toLowerCasster->str.toLowerCase();クラスジェネレータTreeMap::new()->new TreeMap()配列のジェネレータint[]:newlen->newint[len]

    🧮アルゴリズム問題の回顧


    プログラマ-シーケンシャル検索ソルバ
  • 初挑戦
    アルゴリズム学習の指定問題を解決した.問題を解く時の感じは再び私たちに注意して、まだ概念に欠けています.問題を見て、まず思いついたのは、データ・ストリームのデータ・マイニングです.だから文字列配列infoと文字列配列queryを直接グループ化しstreamで5つのfilterを処理して、仕事をしました、ハハハ.精度的に通過したが,効率的にタイムアウトした.もう一度データを見てみると、総データを処理する際、約50億のデータがあり、O(n)を適用できるデータは約10億(?)あることがわかりました.私の知っている限りでは.これは非効率的な方法です.
  • 2 2 2回目の挑戦
    本当に思い出せないので、他のブログ記事を参考にしました.まずはHashMapの資料構造を選びました.まずkeyでそれぞれの場合の組合せを求め,その後List<>で処理する.また,これは内部リストを並べ替えてその値を二分探索する論理により実現される.対応する論理解題に従い,時間的複雑度はO(logn)であるため,効率テストに合格した.
  • アルゴリズムを学ぶ時の感じ
    勉強の中で感じたことは、私の不足点を確認し続けることができることです.この問題を解いているうちに、まだMapインタフェースに関する方法がうまく運用されていないことを感じました.Compute、ComputeIfAbsent、ComputeIfPresent、getOrDefaultメソッドを使用していますが、慣れていないため正しく適用できず、BinarySearchロジックを書く過程で一人では覚えられないため、ブロックされています.いつもアルゴリズムを解くときに感じられるのは解けない問題、あるいは似たような問題が解けないが、概念はまだしっかりしていないようだ.そして、問題を解決することも大切だと感じるが、基本論理は暗記する必要があるようだ.アルゴリズムの問題を整理し続けると同時に、コアアルゴリズムは整理し、暗記し、不足点を整理し続けなければならない.🔥🔥🔥
  • 💪To-Do-List


    ミッション4のコメントを受けた🎉. タスク4の変更プログラマレベル2アルゴリズムチャレンジ(3題)Javaオブジェクト向けSpring入門原理と第3章について
    ジャワの定式-2.3.ストリームの中間演算からストリームを終了(1日では見きれない…)このテープの内容を参照