20210813
43821 ワード
今日の勉強内容🏻就職のためのコードテストCHAPTER 03 GRUDY
https://github.com/sohee0724/This_is_a_coding_test ジャワ神32章、33章 ✍🏻 これは就職のためのコードテストで、CHAPTER 03グリディです.現在の場合、現在は良い方法のみが選択されている の典型的な階調アルゴリズムは、 が最小限の解題構想を考え出すことを要求する.最良に見えるものを繰り返し選択し、最良の解を見つけることができるかどうか、議論→図面の正当性分析が重要です! の一般的な状況では、グリディが最適な年を保証できないことが多い.しかし,符号化試験におけるグリディ問題は,貪欲法で得られた年が最良の年となった場合に,推定できなければ解決できない である.お釣り問題(p.87) 通貨がKの場合、ソースコードの時間的複雑度はO(K) である.の最大単位のお金を取り戻すのは最良の年を保証する理由です=大きい単位はいつも小さい単位の倍数なので、小さい単位の硬貨を総合して他の年の を得ることができません
✍🏻 JAvaの神32章java 8に追加されたのは?
Optionalは、オブジェクト を選択的に処理する. null処理 を簡略化することができる.インタフェースはdefault()メソッド を実装することができる.抽象クラスではextendsを使用する必要がありますが、defaultを使用するインタフェースではimplementsキーワード実装 を使用する必要があります. java.タイムパッケージを参照 ZonedDateTime, LocalDate, DayOfWeek .... 並列ソート
以前使用していたsort()は単一スレッドとして実行され、ParallelSort()は必要に応じて複数のスレッドに分けて実行される.
性能テストの結果から,5000個以上からParallelSort()の方がsort()よりも性能が速いことが分かる.
したがって、数の少ないアレイでは、ParallelSort()を使用する必要はありません.
StringJoiner
順序付けされた文字列を処理するための
Lamda式
インタフェースにのみ適用される方法は1つだけです
切り替え可能なRamda式
デフォルトramda式
パラメータリスト|矢印タグ|式
(int x, int y) → x+y
処理式が1行以上の場合は、カッコで囲むことができます
Predicate bolean teat():2つのオブジェクトの比較 and(), negate(), or(), inEqual() ... T get() Consumer void accept():タスクの実行および結果の受信なし default Consumer and Then():連続動作用 Function R Apply(T):変換が必要な場合にこのインタフェース を使用します.
UnaryOperator : A unary operator frim T→T R Apply(T):1つのタイプの結果が同じ場合、 を使用します.
BinaryOperator : A binary operator from (T, T) → T R Apply(T,U):同じタイプの結果が得られた場合、 が使用されます.
stream収集のようなリストを処理するための 構造 for Each(ブロック): 、ループを実行するように1つずつポップアップ地図(マッパー):データを特定のデータに変換する 等 タイプ 静的方法 参照特定のオブジェクトのインスタンスメソッド を参照してください.特定のタイプの任意のオブジェクトのインスタンスメソッド を参照してください.ジェネレータ を参照
静的メソッドを参照インスタンス参照はシステムです.out::システムクラスに宣言されたout変数(printlnなど)があり、出力変数のprintln()メソッドを呼び出し、「変数に宣言されたメソッドを呼び出す」 を表す.
特定のタイプの任意のオブジェクトを参照するインスタンスメソッド
中間変更ストリーム処理の値 不要なデータまたはWebリクエストのフィルタリング
https://github.com/sohee0724/This_is_a_coding_test
✍🏻 JAvaの神32章java 8に追加されたのは?
Optional
public final class Optional<T> extends Object
// 데이터가 없는 Optional 객체 생성
Optional<String> emptyString = Optional.empty()
// null 추가
Optional<String> nullableString = Optional.ofNullable(null);
// 반드시 데이터가 들어갈 수 있는 상황
Optional<String> commonString = Optional.of("common");
private void getOptionalData(Optional<String> data)
throws Exception {
String defaultValue = "default";
String result1 = data.get();
// 값이 없을 경우 기본값을 지정할 수 있다
String result2 = data.orElse(defaultValue);
Supplier<String> stringSupplier = new Supplier<String>(){
@Override
public String get(){
return "GodOfJava";
}
};
String result3 = data.orElseGet(stringSupplier);
Supplier<Exception> exceptionSupplier =
new Supplier<Exception>(){
@Override
public Exception get(){
return new Exception();
}
};
// 데이터가 없을 경우 예외 발생
String result4 = data.orElseThrow(exceptionSupplier);
}
Default methodpublic intetface DefaultStaticInterface{
String getName();
int Since();
default String getEMail(){
return "[email protected]";
}
}
日付に関連するクラスint[] intValues = new int[10];
Arrays.parallelSort(intValues);
以前使用していたsort()は単一スレッドとして実行され、ParallelSort()は必要に応じて複数のスレッドに分けて実行される.
性能テストの結果から,5000個以上からParallelSort()の方がsort()よりも性能が速いことが分かる.
したがって、数の少ないアレイでは、ParallelSort()を使用する必要はありません.
順序付けされた文字列を処理するための
// 배열의 구성요소 사이에 콤마만 넣고자 할 때
public void joinStringOnlyComma(){
String[] stringArray =
new String[]{"StudyHard", "GodOfJava", "Book"};
StringJoiner joiner = new StringJoiner(",");
StringJoiner joiner2 = new StringJoiner(",","(",")");
for(String string:stringArray){
joiner.add(string);
joiner2.add(string);
}
System.out.println(joiner);
System.out.println(joiner2);
}
//출력값
StudyHard,GodOfJava,Book
(StudyHard,GodOfJava,Book)
✍🏻 JAvaの神33章java 8での変化は?Lamda式
インタフェースにのみ適用される方法は1つだけです
切り替え可能なRamda式
デフォルトramda式
パラメータリスト|矢印タグ|式
(int x, int y) → x+y
処理式が1行以上の場合は、カッコで囲むことができます
// 이 어노테이션을 사용하면
// 인터페이스에는 내용이 없는 하나의 메소드만 선언할 수 있다
@FuncctionalInterface
interface Calculate {
int operation(int a, int b);
}
Calculate cal = (a, b) -> a+b;
// Runnable은 run()메소드 밖에 없기 때문에 람다 표현식 처리 가능
new Thread(()->{
System.out.println("람다");
}).start();
or
new Thread(() -> System.out.println("람다")).start();
java.util.関数パッケージPredicate
Predicate<String> predicateLength5 = (a) -> a.length()>5;
Predicate<String> predicateContains = (a) -> a.contains("God");
Predicate<String> predicateStart = (a) -> a.startsWith("God");
String str = "GodOfJava"
// 데이터가 해당 조건에 맞는지 확인
predicateLength5.test(str)
// 데이터가 두개의 조건에 모두 맞는지 확인
predicateLength5.and(predicateContains).test(str)
// 데이터가 두개의 조건 중 하나라도 맞는지 확인
predicateLength5.or(predicateContains).test(str)
// 데이터가 조건과 다른지 확인
predicateLength5.negate().test(str)
SupplierUnaryOperator : A unary operator frim T→T
BinaryOperator : A binary operator from (T, T) → T
stream
list.stream().filter(x-> x>10).count()
스트림생성 중개 연산 종단 연산
- 스트림 생성 : 컬렉션 목록을 스트림 객체로 변환
- 중개 연산 : 생성된 스트림 객체를 사용해 중개 연산 부분에서 처리
이 부분에서는 아무런 결과를 리턴하지 못한다
0개 이상의 중개 연산이 존재
- 종단 연산 : 중개 연선에서 작업된 내용을 바탕으로 결과 리턴
// 배열 -> 리스트
Integer[] values = { 1, 3, 5 };
List<Integer> list = Arrays.stream(values).collect(Collectiors.toList());
ストリーム配信コンピューティングpublic void printStudentNames(List<StudentDTO> students){
// student = StudentDTO 객체
students.stream()
.forEach(student -> System.out.println(student.getName()));
// StudentDTO 객체를 사용하는게 아니라 String값 사용
students.stream().map(student->student.getNmae())
.forEach(name->System.out.println(name));
}
メソッド参照=二重コロン(:)静的メソッドを参照
public class MethodReferenceSample {
MethodReferenceSampel sample = new MethodReferenceSample();
String[] stringArray = {"요다", "만두", "건빵"};
sample.staticReference(stringArray);
}
public void staticReference(String[] stringArray){
// of() : 스트림 객체 생성
// String의 스트림이기 때문에 forEach() 문장 안에서는 String을 제공
Stream.of(stringArray).forEach(MethodReferenceSample::printResult);
}
public static void printResult(String value){
System.out.println(value);
}
特定のオブジェクトを参照するインスタンスメソッド特定のタイプの任意のオブジェクトを参照するインスタンスメソッド
private void objectReference(String[] stringArray){
// 임의 객체 참조
Arrays.sort(stringArray, String::compareToIgnoreCase);
// 인스턴스 메소드 참조
Arrays.asList(stringArray).stream().forEach(System.out::println);
}
public int compareToIgnoreCase(String str){
return CASE_INSENSITIVE_ORDER.compare(this, str);
}
ジェネレータを参照interface MakeString{
String fromBytes(char[] chars);
}
private void createInstance(){
// String 생성자 중에 char[]를 매개 변수로 받는 생성자가
// 있기 때문에 이렇게 사용 가능
MakeSring makeString = String::new;
char[] chars = {'G','O','D'};
String madeString = makeString.fromBytes(chars);
System.out.println(madeString);
}
Stream map()中間変更
List<Integer> intList = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
// initList 내용들 모두 x3하기
intList.stream().forEach(x->System.out.println(x*3));
// map() : 스트림에서 처리하는 값들을 중간에 변경할 수 있다.
intList.stream().map(x->x*3).forEach(System.out::println);
//studentList에서 이름만 List로 뽑아 내고 싶을 경우
List<StudentDTO> nameList = new ArrayList<>();
studentList.add(new StudentDTO("요다",43,99,10));
studentList.add(new StudentDTO("만두",30,49,90));
studentList.add(new StudentDTO("건빵",32,71,70));
List<String> nameList = studentList.stream().map(x->x.getName())
.collect(Collectors.toList());
Stream filter()private void filterWithScoreForLoop
(List<StudentDTO> studentList, int scoreCutLine){
studentList.stream().filter(student->student.getScore()>scoreCutLine)
.forEach(student -> System.out.println(student.getName()));
}
Reference
この問題について(20210813), 我々は、より多くの情報をここで見つけました https://velog.io/@always/TIL-20210813テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol