총 게시물 22건, 최근 0 건 안내 RSS 글쓰기
이전글  다음글  목록 글쓰기
[TIP&TECH]

comparator, ArrayList sort, 람다식을 이용한 컬렉션, 객체 비교/[Java]/[Android]

글쓴이 : 김병희라고요 날짜 : 2016-05-25 (수) 13:00 조회 : 3744
글주소 : http://www.androidside.com/B50/119
 
  IT뱅크 JAVA교육 정지민
자바 기초~심화, 실무중심 교육, 자격증, 취업 준비,수강료할인 이벤트, 상담신청
www.kgitbank-jm.co.kr
  서울게임아카데미
추천JAVA, 2017년 한국 소비자만족지수 1위, 고용노동부국비지원, 수강료조회
www.seoulgame.co.kr
  KGITBANK학원 김종수
상담예약접수처, 중고등학생수시대비, 대학전공, 국비지원취업, 정보보안전문가학원.
www.hrditbank.co.kr
신청하기


comparator, ArrayList sort, 람다식을 이용한 컬렉션, 객체 비교/[Java]/[Android]
/ 2016.05.25. 최초 작성

원본 : http://blog.daum.net/andro_java/197

도움이 될까 하여 구글링한 내용을 머리해 둔다.

참고 : http://devbible.tistory.com/23
미러 : http://blog.daum.net/andro_java/176
위 참고 페이지 글을 보고 ListView 정렬을 단방에 끝낼 수 있었다.
참고 페이지에 가면 필자가 질문한 내용도 볼 수 있다.

참고 : http://blog.naver.com/s1998324/220567962925
미러 : 아래(위 urll 검색하면 빨리 찾아짐)
위 참고 페이지에 필자가 질문한 내용이 있다.

참고 : http://ojc.asia/bbs/board.php?bo_table=LecJava&wr_id=730
미러 : 아래(위 urll 검색하면 빨리 찾아짐)

필자의 숙제 요지는 다음과 같다.
테이블 데이터 아닌 문자열 데이터를 구분자 기준으로 몇 개의 칼럼으로 구분한 후, 어느 칼럼은 수치로 어느 칼럼은 문자열로 비교하여 정렬하는 방법이 필요하다.

그런데, 질문하고 하루를 넘기기 전에 필자 스스로 아이디어를 얻었다.
그 방법이 성공하면 '문자열에 포함된 수치(숫자)와 함께 문자열 정렬하기' 정도의 제목으로 이 블로그에 올릴 것이다.
----------------------------------------
ArrayList Collection, collections.sort, comparator   JAVA / StudY
2015.12.14. 15:01
http://blog.naver.com/s1998324/220567962925

* 실습 1
아래와 같이 chapter02 패키지를 만들고 그 안에 q1 클래스를 만드시오.

package chapter02;

public class q1 {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
 }
}

제목 비용 저자 판매순위
콩쥐팥쥐 20000 미상 1
흥부놀부 25000 미상 2
자바의정석 35000 정석 3
안드로이드정복 15000 김상형 4

1). 위에 테이블의 데이터를 담기위한 DTO객체인 Book 클래스를 객체 모델링하시오.

package chapter02;

import java.util.*;

class q1
{
   public static void main(String[] args)
   {
   } // main
}

class Book {
    String title = "";
    int cost;
    String author = "";
    int rank;

    Book(String title, int cost, String author, int rank) {
         this.title = title;
         this.cost = cost;
         this.author = author;
         this.rank = rank;
    }
}

2). 위 테이블의 데이터 4행 모두를 ArrayList에 담되 Book 클래스의 제네릭 타입으로 저장하시오.

package chapter02;

import java.util.*;

class q1
{
   public static void main(String[] args)
   {
     ArrayList<Book> info = new ArrayList<Book>();
     info.add(new Book("콩쥐팥쥐",20000,"미상",1));
     info.add(new Book("흥부놀부",25000,"미상",2));
     info.add(new Book("자바의정석",35000,"정석",3));
     info.add(new Book("안드로이드정복",15000,"김상형",4));
   } // main
}

3). 2번에서 담은 데이터를 for문으로 돌리면서 책제목을 모두 출력하시오

       Iterator<Book> it = info.iterator();
       for(;it.hasNext();) {
         Book t = it.next();
            System.out.println(t.title);
 }
추가.

4). 2번에서 담은 데이터를 foreach 구문으로 돌리면서 비용을 모두 출력하시오.

for(Book b: info){
   System.out.println(b.cost);
}

추가

5). 이번에는 책제목을 모두 출력하되 책제목이 sort되게 출력하도록한다.

  Book 클래스에 Comparable 인터페이스를 구현하고 Collections.sort(list)를 이용
  첫번째 파라메터는 컬렉션이다.

  (스트링 비교시 String 클래스의 compareTo 함수 활용)- 모르겠다....ㅜ

6). 5번처럼 책제목이 sort되게 출력되도록 하되,
  Book 클래스는 수정하지 않고 Collections.sort(list, c) 를 이용한다.

package chapter02;

import java.util.*;

class q1
{
   public static void main(String[] args)
   {
    ArrayList<Book> info = new ArrayList<Book>();
     info.add(new Book("콩쥐팥쥐",20000,"미상",1));
     info.add(new Book("흥부놀부",25000,"미상",2));
     info.add(new Book("자바의정석",35000,"정석",3));
     info.add(new Book("안드로이드정복",15000,"김상형",4));

       Comparator<Book> comp = new Comparator<Book>() {

  @Override
  public int compare(Book o1, Book o2) {
   return o1.getTitle().compareTo(o2.getTitle());
  }
     };
       Collections.sort(info, comp);

       Iterator<Book> it = info.iterator();
       while(it.hasNext()){

        Book t = it.next();
        System.out.println(t.title);
       }

       for(Book b: info){
           System.out.println(b.cost);
       }
   } // main
}

class Book implements Comparator<Book> {

 String title = "";
    int cost;
    String author = "";
    int rank;

    Book(String title, int cost, String author, int rank) {
         this.title = title;
         this.cost = cost;
         this.author = author;
         this.rank = rank;
    }

    public String getTitle() {
  return title;
 }

 public void setTitle(String title) {
  this.title = title;
 }

 public int getCost() {
  return cost;
 }

 public void setCost(int cost) {
  this.cost = cost;
 }

 public String getAuthor() {
  return author;
 }

 public void setAuthor(String author) {
  this.author = author;
 }

 public int getRank() {
  return rank;
 }

 public void setRank(int rank) {
  this.rank = rank;
 }

 @Override
 public int compare(Book b1, Book b2) {
  // TODO Auto-generated method stub
  return b1.getTitle().compareTo(b2.getTitle());
 }
}

첫번째 파라메터는 컬렉션이고 두번째 파라메터는 Comparator 인터페이스를 Anonymous class로 구현한다.
----------------------------------------
http://ojc.asia/bbs/board.php?bo_table=LecJava&wr_id=730

람다식을 이용한 컬렉션, 객체 비교
자바의 Comparator 클래스는 컬렉션(Collection)을 정렬하기 위한 클래스이다. 첨부 예제는 Emp 클래스의 ename을 기준으로 익명클래스와 Comparator를 이용한 방법, 람다식을 이용한 방법의 예제 입니다.
참고하세요~
package ojc;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
class Emp {
int empno;
String ename;
Emp(int empno, String ename) {
this.empno = empno;
this.ename = ename;
}
public String getEname() {
return ename;
}
public String toString() {
return "[EMPNO : ]" + empno + "," + "ENAME : " + ename + "]";
}
}
public class LambdaTest {
public static void main(String[] args) {
List<Emp> empList = Arrays.asList(new Emp(1, "1길동"),
new Emp(4, "4길동"),
new Emp(2, "2길동"));
//입력한대로 출력
for (Emp emp : empList) {
System.out.println(emp);
}
//익명클래스, ename기준으로 Comparator를 이용한 오름차순 정렬
Collections.sort(empList, new Comparator<Emp>() {
public int compare(Emp e1, Emp e2) {
return e1.getEname().compareTo(e2.getEname());
}
});
System.out.println("-------------------------");
for (Emp emp : empList) {
System.out.println(emp);
}
//람다식이용, ename기준으로 내림차순 정렬
Collections.sort(empList, (Emp e1, Emp e2) -> e2.getEname().compareTo(e1.getEname()));
System.out.println("-------------------------");
for (Emp emp : empList) {
System.out.println(emp);
}
//람다식이용, ename기준으로 오름차순 정렬
Collections.sort(empList, (Emp e1, Emp e2) -> e1.getEname().compareTo(e2.getEname()));
System.out.println("-------------------------");
for (Emp emp : empList) {
System.out.println(emp);
}
}
}
[결과]
[EMPNO : ]1,ENAME : 1길동]
[EMPNO : ]4,ENAME : 4길동]
[EMPNO : ]2,ENAME : 2길동]
-------------------------
[EMPNO : ]1,ENAME : 1길동]
[EMPNO : ]2,ENAME : 2길동]
[EMPNO : ]4,ENAME : 4길동]
-------------------------
[EMPNO : ]4,ENAME : 4길동]
[EMPNO : ]2,ENAME : 2길동]
[EMPNO : ]1,ENAME : 1길동]
-------------------------
[EMPNO : ]1,ENAME : 1길동]
[EMPNO : ]2,ENAME : 2길동]
[EMPNO : ]4,ENAME : 4길동]
실무프로그래머 전문교육 (오라클,SQL,자바,스프링프레임워크,닷넷,안드로이드,웹퍼블리싱) 오라클자바커뮤니티교육센터(100%환급, 개인부담 0~20%) http://ojcedu.com
----------------------------------------




추천 버튼을 클릭하면 추천한 자와 추천받은 자 모두에게 포인트가 지급됩니다.

이전글  다음글  목록 글쓰기

총 게시물 22건, 최근 0 건 안내 RSS
번호 분류 제목 글쓴이 날짜 추천 비추천 조회
22 소스코드
간단하게 만들어 봤어요 학생이라 많이 부족하지만 실무자님들 조언 부탁드립니다. package lot; import java.util.Arr…
허브향 12-09 1 0 3649
21 TIP&TECH
comparator, ArrayList sort, 람다식을 이용한 컬렉션, 객체 비교/[Java]/[Android] / 2016.05.25. 최초 작성 원본 : http://blog.daum…
김병희라고요 05-25 0 0 3745
20 소스코드
어플리케이션 화면으로 리스트뷰를 이용해 gps데이터를 받기는 했는데 이걸 구글맵 지도에 표시하고 싶은데 어떻…
최문정 05-11 0 1 3311
19 소스코드
저희가 어플에 구글맵 지도에 현재위치까지 띄운 상태인데 근접경고 소스를 찾아보고 코딩을 해봤는데 토스트…
최문정 05-11 0 1 3809
18 소스코드
안녕하세요. 버튼의 위치때문에 계속 해매고 있는 바보입니다 ㅠ; 일단 최종적인 목표는 첫번째 사진을 2번째 …
RoundRob 05-08 0 1 3661
17 소스코드
안녕하세요. 컴포넌트들의 배치 방법에 대해서 질문 있습니다.    
RoundRob 05-07 0 1 3403
16 소스코드
안녕하세요. 자바 스윙관련해서 프로그램 만드는 도중에,  다른 소스파일에서는 JFrame 에 setTitle (" 할말") …
RoundRob 05-04 0 1 3917
15 강좌
데이터베이스를 만드는 간단한 방법은 Context 클래스에 정의된 openOrCreatDatabase() 메소드를 사용해서 데이트베이스…
이카루스031 05-09 4 0 6380
14 강좌
RPC(Remote Procedure Call)은 원격지 서버에 함수를 정의하고 로컬컴퓨터에서 그 함수를 호출하는 것이다. XML-RPC란 …
이카루스031 05-08 1 0 4485
13 강좌
안드로이드에서는 표준자바에서 사용하던 java.net 패키지의 클래스들을 그대로 사용할 수 있기 때문에 소켓으로 …
이카루스031 05-05 5 0 4651
12 강좌
애니메이션 대상과 액션을 지정하면 애니메이션 효과를 디스플레이 할 수 있는 방식. 트윈 애니메이션의 대상은…
이카루스031 05-05 2 0 5142
11 강좌
ImageView와 AnimationDrawable 그리기 객체를 이용해 애니메이션을 구현하는 방법과 AnimationDrawable 클래스로 정의되어 있…
이카루스031 05-05 0 0 6015
10 강좌
여러개의 이미지를 스레드를 이용해 화면에 디스플레이 하는 방법으로는 SurfaceView를 사용하는 방법도 있지만 …
이카루스031 05-04 1 0 4162
9 강좌
새로 만든 스레드에서 UI객체에 직접접근불가.. 핸들러를 사용하면 코드 복잡.. AsyncTask사용하면 백그라운드 작…
이카루스031 05-04 1 0 4120
8 소스코드
이클립스에 Guess 클래스를 만들고 실행시키면 됩니다.  //import java.util.Random; import java.util.Scanner; /**  *…
자설 04-24 0 0 8067
7 TIP&TECH
전자정부표준프레임워크에 Cubrid DB을 위한 DB connection poll 만들때, 기본으로 제공하는 커넥션풀을 사용하는 것보…
예민한인어 03-15 0 0 6801
6 강좌
자바가 미움 받는 15가지 이유     자바는 아주 유익한 언어이고, 안정과 편재를 위한 자바의 타입 검증…
카이로 10-15 11 0 10932
5 소스코드
Java Image Filters I have a large number of Java Image filters which are freely available for download from this site. The filters are all standard J…
카이로 04-03 6 0 9505
4 소스코드
import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import…
카이로 04-03 5 0 10483
3 소스코드
private void DeleteTheOldestFile(String strFolderPath) {  long nLastModifiedDate = 0;  File targetFile = null;    File[] arrF…
초봅니다요 11-28 4 0 9216
 1  2  맨끝
 


Copyright ⓒ www.androidside.com. All rights reserved.
채팅 권한: 글쓰기 1개
2레벨 이상만 대화 가능
공개 채팅: 평일 !(9시 ~ 17시),토,일
안사2 변경사항 보러가기 챗방이 잘 안보이면 크롬에서 접속해주세요
챗방 숨기기 |  챗방 보이기