고코딩
스트림 실습 문제 8개(매우 기초) 본문
모던 자바 인 액션 이라는 책을 공부하면서 풀었던 스트림 기초 문제 입니다.
기본적으로
- Trader
- Transaction
2가지 클래스가 정의되어 있어야 합니다.
Trader
public class Trader {
private final String name;
private final String city;
public Trader(String n, String c){
this.name = n;
this.city = c;
}
public String getName() {
return name;
}
public String getCity() {
return city;
}
@Override
public String toString() {
return "trader:"+this.name+" in "+this.city;
}
}
Transaction
public class Transaction{
private final Trader trader;
private final int year;
private final int value;
public Transaction(Trader trader, int year, int value){
this.trader = trader;
this.year = year;
this.value = value;
}
public Trader getTrader() {
return trader;
}
public int getYear(){
return year;
}
public int getValue(){
return value;
}
@Override
public String toString() {
return "Transaction{" +
"trader=" + trader +
", year=" + year +
", value=" + value +
'}';
}
}
기본 데이터를 추가해 줍시다.
public static void main(String[] args) throws IOException {
Trader raoul = new Trader("Raoul", "Cambridge");
Trader mario = new Trader("Mario", "Milan");
Trader alan = new Trader("Alan", "Cambridge");
Trader brian = new Trader("Brian", "Cambridge");
List<Transaction> transactions = Arrays.asList(
new Transaction(brian, 2011, 300),
new Transaction(raoul, 2012, 1000),
new Transaction(raoul, 2011, 400),
new Transaction(mario, 2012, 710),
new Transaction(mario, 2012, 700),
new Transaction(alan, 2012, 950)
);
}
자 이제 문제를 풀어봅시다.
- 2011년에 일어난 모든 트랜잭션을 찾아 값을 오름차순으로 정리하시오.
- 거래자가 근무하는 모든 도시를 중복없이 나열하시오
- 케임브리지에서 근무하는 모든 거래자를 찾아서 이름순으로 정렬하시오
- 모든 거래자의 이름을 알파벳순으로 정리해서 반환하시오
- 밀라노에 거래자가 있는가?
- 케임브리지에 거주하는 거래자의 모든 트랜잭션값을 출력하시오
- 전체 트랜잭션 중 최댓값은 얼마인가?
- 전체 트랜잭션 중 최솟값은 얼마인가?
정답
1.
List<Transaction> transactions1= transactions.stream()
.filter(transaction -> transaction.getYear() == 2011) //2011년에 발생한 트랜잭셩르 필터링하도록 프레디케이트를 넘겨줌
.sorted(comparing(Transaction::getValue)) //트랜잭션값으로 요소 정렬
.collect(toList()); //결과 그트림의 모든 요소를 리스트로 반환
System.out.println(transactions1);
2.
List<String> transactions2 = transactions.stream()
.map(Transaction::getTrader)
.map(Trader::getCity)
.distinct()
.collect(toList());
System.out.println(transactions2);
3.
List<Trader> transactions3 = transactions.stream()
.filter(transaction -> transaction.getTrader().getCity().equals("Cambridge"))
.map(Transaction::getTrader)
.sorted(comparing(Trader::getName))
.distinct()
.collect(toList());
System.out.println(transactions3);
4.
String transcation4 = transactions.stream()
.map(transaction -> transaction.getTrader().getName())
.distinct()
.sorted()
.reduce("", (n1,n2)->n1+n2);
System.out.println(transcation4);
5.
boolean transaction5 = transactions.stream()
.anyMatch(transaction -> transaction.getTrader().getCity().equals("Millano"));
System.out.println(transaction5);
6.
List<Integer> transaction6 = transactions.stream()
.filter(transaction -> transaction.getTrader().getCity().equals("Cambridge"))
.map(Transaction::getValue)
.collect(toList());
System.out.println(transaction6);
7.
Optional<Integer> transaction7 = transactions.stream()
.map(Transaction::getValue)
.reduce(Integer::max);
if(transaction7.isPresent()){
System.out.println(transaction7.get());
}
8.
Optional<Integer> transaction8 = transactions.stream()
.map(Transaction::getValue)
.reduce(Integer::min);
if(transaction8.isPresent()){
System.out.println(transaction8.get());
}
'JAVA' 카테고리의 다른 글
slg4j java 실행시 에러 원인x 해결만 (0) | 2021.06.16 |
---|---|
[JAVA] JNDI란? (0) | 2021.05.26 |
[JAVA] 람다는 무엇일까? (0) | 2021.05.13 |
[JAVA] Collection 관계 (0) | 2021.04.07 |
[JAVA] JDK JRE JVM 관계 (0) | 2021.04.05 |