[java]정렬하기(Sort), 람다식

2024. 8. 21. 01:05·JAVA

20240820수업

정렬:Sorting

  • 오름차순 정렬:Ascending 1234, ABCD, 가나다라 순, 선동률 순, 방어율 순
  • 내림차순 정렬:Descending 9876, DCBA, ..., 타율, 홈런순, 승수

Array정렬

①Array.sort()

int [] nums = {8, 5, 4, 7, 1};//초기값 설정

 

System.out.println("1.");

System.out.println(Arrays.toString(nums));

Arrays.sort(nums); //오름차순 정렬

System.out.println(Arrays.toString(nums));

  • Arrays.sort(nums, Collections.reverseOrder());  =>error
    ∵int[] 배열은 reverseOrder할수가 없음

②함수 만들기

String out_msg = " ";

for (int i = 0; i < nums.length; i++) { //i 0-4,1-3

out_msg += (nums[ 4-i]);

if(nums[4-i]!=1)  //=> if(i<num.length-1)

out_msg += ", ";

}

System.out.println(out_msg);

③Arrays.sort(변수, Collections.reverseOrder()) , Integer[]

Integer [] arr = {8, 5, 4, 7, 1};

System.out.println(Arrays.toString(arr));

Arrays.sort(arr);  //오름차순

System.out.println(Arrays.toString(arr));

Arrays.sort(arr, Collections.reverseOrder()); //내림차순

//Collections이라는 클래스 안에 잇는 arr을 비교하기위해선 Integer를 사용해서 인스턴스화 시킨 후 비교가능

System.out.println(Arrays.toString(arr));

 

Integer [] arr1=new Integer[] {1,5,3,2,4};

Integer [] arr2={10,50,30,20,40};

Double [] arr3={12.5,53.4,37.8,20.9,40.7};

 

System.out.println("3.");

System.out.println(Arrays.toString(arr1));

람다식 알아보기

:java1.8부터 가능한 문법

  • 함수 표현식을 줄인 것
  • 새로나오는 언어들의 코딩이 간결해지는 추세라서 java에서 도입함

ex)(a,b)->{return a-b;}

[예제]
 public int add(int a,int b){
     return a+b;
 }함수 한개를 위한 클래스
 >>위 코드를
 (a,b)->{return a+b;} 로 만들거나
 (a,b)-> a+b; >>왼쪽과 같이 return 까지 생략가능 
 (int a, int b)->{ return a+b;}

 Arrays.sort(arr1,(a,b)->a+b); 함수 사용
 함수의 인자로 람다식을 사용
 함수의 인자를 함수로 사용하는 기술
 ->callback 함수(인수자리에 함수를 넣는것 >callback)

③람다식 표현

Arrays.sort(arr1,(a,b)->{return a-b;});//오름차순

System.out.println(Arrays.toString(arr1));

 

Arrays.sort(arr1,(a,b)->{return b-a;});//내림차순

System.out.println(Arrays.toString(arr1));

④double 인자를 a.compareTo(b)

Arrays.sort(arr3,(a,b)->{return a.compareTo(b);});//오름차순

System.out.println(Arrays.toString(arr3));

Arrays.sort(arr3,(a,b)->{return b.compareTo(a);});//내림차순

System.out.println(Arrays.toString(arr3));

⑤문자열을 순서대로 정렬

String[]names= {"이순신","이이","세종","최영","연개소문"};

System.out.println(Arrays.toString(names));

 

Arrays.sort(names,(a,b)->{return a.compareTo(b);});//순서를 따지는 것이므로 equals를 쓰면안되고 compareTo를 써야함

System.out.println(Arrays.toString(names));

Arrays.sort(names,(a,b)->{return b.compareTo(a);});

System.out.println(Arrays.toString(names));

ArrayList정렬

ArrayList<Integer> list=new ArrayList<>();

list.add(10);

list.add(5);

list.add(35);

list.add(57);

list.add(28);

System.out.println(list);

generic:<T> T:class type
제네릭은 컬렉션에 저장할 수 있는 객체의 타입을 명확히 지정할 수 있다.
∴ArrayList 안의 요소가 Integer type의 data만 가능하다
(ArrayList는 실행하다가 배열의 크기를 조정할수있는데 이떄 Integer가 필요하다.)

①Collections.sort(변수명,Collections.reverseOrder());

Collections.sort(list); //오름차순 정렬

System.out.println(list); 

Collections.sort(list,Collections.reverseOrder()); //내림차순 정렬

System.out.println(list);

②Comparator

아래와 같이 선언해서 Comparator라는 객체 생성 인터페이스가 코드를 가질수 있게한다. 즉 Comparator를 class처럼 사용하게 할 수 있게 한다.

Comparator<Integer> comp1=new Comparator<Integer>() {

그리고 아래와 같이 메소드를 구현한다.

@Override

public int compare(Integer o1, Integer o2) {

return o1-o2; //오름차순 정렬

//return o2-o1; 내림차순

}

출력은 아래와 같이 한다.

Collections.sort(list,comp1);

System.out.println(list);

③문자열 ArrayList를 정렬

ArrayList<String> names=new ArrayList<>();

names.add("원영");

names.add("윈터");

names.add("카리나");

names.add("사나");

names.add("미나");

Comparator<String> name1=new Comparator<String>() {

 

@Override

public int compare(String o1, String o2) {

// TODO Auto-generated method stub

return o1.compareTo(o2); //오름차순 정렬

//return o2.compareTo(o1) ; //내림차순 정렬

}

};

Collections.sort(names,name1);

System.out.println(names);

④ArrayList 람다식

Collections.sort(names,(a,b)->{return a.compareTo(b);});

System.out.println(names);

compareTo를 쓰는 이유▼

더보기

여기서 compareTo를 쓰는 이유는 람다식은 Comparable인터페이스 기반이기 때문이다.

이떄, Comparable 인터페이스는 "자기 자신과 매개변수 객체를 비교"하는 것이고, Comparator 인터페이스는는 "두 매개변수 객체를 비교"하는 것이다. 더 자세히 알고 싶다면 아래 링크를 참조할 것

https://st-lab.tistory.com/243

 

자바 [JAVA] - Comparable 과 Comparator의 이해

아마 이 글을 찾아 오신 분들 대개는 Comparable과 Comparator의 차이가 무엇인지 모르거나 궁금해서 찾아오셨을 것이다. 사실 알고보면 두 개는 그렇게 어렵지 않으나 아무래도 자바를 학습하면서 객

st-lab.tistory.com

 

응용

(숫자와 문자열이 같이 있는 배열 정렬)

public class TestStudentSort {

	public static void main(String[] args) {
		Student [] students=new Student [5];
		students[0]=new Student(3,"Hanni");
		students[1]=new Student(2,"Haerin");
		students[2]=new Student(1,"Minji");
		students[3]=new Student(5,"Hyein");
		students[4]=new Student(4,"Danielle");
		disp_array(students); //display.array
		
		
		//번호순으로 내림차순 정렬
		Arrays.sort(students);
		disp_array(students);

		
		
		//이름순으로 오름차순 정렬
		Arrays.sort(students,new Comparator<>() {

			@Override
			public int compare(Student o1, Student o2) {
				return o1.getName().compareTo (o2.getName()); //문자일때는 compareTo 숫자일때는 -
			}});
		disp_array(students);
		
		//----------------------------------
		ArrayList<Student> sList=new ArrayList<>();
		sList.add(new Student(10,"하니") );
		sList.add(new Student(15,"해린") );
		sList.add(new Student(20,"민지") );
		sList.add(new Student(13,"혜인") );
		sList.add(new Student(16,"다니엘") );
		sList.add(new Student(11,"원영") );
		
		
		//번호순으로 정렬
		//Collections.sort(sList); //번호순 오름차순
		Collections.sort(sList, new Comparator<Student>() {


			@Override
			public int compare(Student o1, Student o2) {
				// TODO Auto-generated method stub
				return o1.getSno()-o2.getSno();
			}
			});
		disp_List(sList);
		
		
		//이름순으로 오름차순 정렬
		Collections.sort(sList,(a,b)->{return a.getName().compareTo(b.getName());});
		disp_List(sList);

	}

	private static void disp_array(Student[] students) {
		// TODO Auto-generated method stub
		
	}
}

'JAVA' 카테고리의 다른 글

[java]Collection Framework  (3) 2024.08.22
[java]class에 모든 기능을 구현해서 출력  (0) 2024.08.22
[java] action , abstract, interface  (0) 2024.08.21
[java]객체 개념  (0) 2024.08.20
[java]getter/setter  (0) 2024.08.18
'JAVA' 카테고리의 다른 글
  • [java]Collection Framework
  • [java]class에 모든 기능을 구현해서 출력
  • [java] action , abstract, interface
  • [java]객체 개념
라텐느
라텐느
이제 막 개발을 시작한 초보가 개인공부를 하는 공간입니다.
  • 라텐느
    괴발개발
    라텐느
    • 개발자 (150)
      • HTML|CSS (14)
      • JAVA (29)
      • JAVACSCRIPT (15)
      • SQL (15)
      • 기타 (6)
      • JSP (2)
      • SPRING (13)
      • SPRING BOOT (6)
      • Git&GitHub (1)
      • 시행착오 (2)
      • 개발일지 (35)
        • GreenMiniProject1 (12)
        • GreenMiniProject2 (9)
        • GreenFinalProject (14)
      • Flutter (5)
      • 자격증 (1)
        • SQLD (1)
      • AWS (2)
      • Linux (1)
  • 블로그 메뉴

    • 홈
    • 방명록
    • 태그
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    db
    개발자
    일지
    태그
    AJAX
    티스토리챌린지
    CSS
    HTML
    JS
    input
    JQuery
    link
    javascript
    java
    tag
    자기계발
    오블완
    SQL
    링크
    부트캠프
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
라텐느
[java]정렬하기(Sort), 람다식
상단으로

티스토리툴바