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

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

글쓴이 : 김병희라고요 날짜 : 2016-05-25 (수) 13:00 조회 : 4006
글주소 : http://www.androidside.com/B50/119
 
  서울게임아카데미
추천JAVA, 2018년 한국 소비자만족지수 1위, 고용노동부국비지원, 수강료조회
www.seoulgame.co.kr
  KGITBANK학원 김종수
상담예약접수처, 중고등학생수시대비, 대학전공, 국비지원취업, 정보보안전문가학원.
www.hrditbank.co.kr
  아마존 AWS 공식사이트
AWS 클라우드로 개발하는 JAVA, 유동적인 리소스 관리, 편리한 배포, 디버깅
aws.amazon.com/ko/
신청하기


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 4017
21 TIP&TECH
comparator, ArrayList sort, 람다식을 이용한 컬렉션, 객체 비교/[Java]/[Android] / 2016.05.25. 최초 작성 원본 : http://blog.daum…
김병희라고요 05-25 0 0 4007
20 소스코드
어플리케이션 화면으로 리스트뷰를 이용해 gps데이터를 받기는 했는데 이걸 구글맵 지도에 표시하고 싶은데 어떻…
최문정 05-11 0 1 3496
19 소스코드
저희가 어플에 구글맵 지도에 현재위치까지 띄운 상태인데 근접경고 소스를 찾아보고 코딩을 해봤는데 토스트…
최문정 05-11 0 1 4022
18 소스코드
안녕하세요. 버튼의 위치때문에 계속 해매고 있는 바보입니다 ㅠ; 일단 최종적인 목표는 첫번째 사진을 2번째 …
RoundRob 05-08 0 1 3899
17 소스코드
안녕하세요. 컴포넌트들의 배치 방법에 대해서 질문 있습니다.    
RoundRob 05-07 0 1 3578
16 소스코드
안녕하세요. 자바 스윙관련해서 프로그램 만드는 도중에,  다른 소스파일에서는 JFrame 에 setTitle (" 할말") …
RoundRob 05-04 0 1 4126
15 강좌
데이터베이스를 만드는 간단한 방법은 Context 클래스에 정의된 openOrCreatDatabase() 메소드를 사용해서 데이트베이스…
이카루스031 05-09 4 0 6561
14 강좌
RPC(Remote Procedure Call)은 원격지 서버에 함수를 정의하고 로컬컴퓨터에서 그 함수를 호출하는 것이다. XML-RPC란 …
이카루스031 05-08 1 0 4638
13 강좌
안드로이드에서는 표준자바에서 사용하던 java.net 패키지의 클래스들을 그대로 사용할 수 있기 때문에 소켓으로 …
이카루스031 05-05 5 0 4807
12 강좌
애니메이션 대상과 액션을 지정하면 애니메이션 효과를 디스플레이 할 수 있는 방식. 트윈 애니메이션의 대상은…
이카루스031 05-05 2 0 5307
11 강좌
ImageView와 AnimationDrawable 그리기 객체를 이용해 애니메이션을 구현하는 방법과 AnimationDrawable 클래스로 정의되어 있…
이카루스031 05-05 0 0 6218
10 강좌
여러개의 이미지를 스레드를 이용해 화면에 디스플레이 하는 방법으로는 SurfaceView를 사용하는 방법도 있지만 …
이카루스031 05-04 1 0 4279
9 강좌
새로 만든 스레드에서 UI객체에 직접접근불가.. 핸들러를 사용하면 코드 복잡.. AsyncTask사용하면 백그라운드 작…
이카루스031 05-04 1 0 4258
8 소스코드
이클립스에 Guess 클래스를 만들고 실행시키면 됩니다.  //import java.util.Random; import java.util.Scanner; /**  *…
자설 04-24 0 0 8359
7 TIP&TECH
전자정부표준프레임워크에 Cubrid DB을 위한 DB connection poll 만들때, 기본으로 제공하는 커넥션풀을 사용하는 것보…
예민한인어 03-15 0 0 7037
6 강좌
자바가 미움 받는 15가지 이유     자바는 아주 유익한 언어이고, 안정과 편재를 위한 자바의 타입 검증…
카이로 10-15 11 0 11217
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 9792
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 10755
3 소스코드
private void DeleteTheOldestFile(String strFolderPath) {  long nLastModifiedDate = 0;  File targetFile = null;    File[] arrF…
초봅니다요 11-28 4 0 9400
 1  2  맨끝
 


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