ํ๋ ์์ํฌ๋ฅผ ์ํ JAVA - Java์ Collection ์ด์ผ๊ธฐ
1. Collection
์ฌ๋ฌ ๋ฐ์ดํฐ์ ๋ฌถ์์ ์ปฌ๋ ์ ์ด๋ผ๊ณ ํฉ๋๋ค.
- ์ปฌ๋ ์ ์ ์ถ์์ฒด ์ ๋๋ค.
- Collection
- List
- LinkedList
- ArrayList
- Vector
- Stack
- Set
- HashSet
- List
๋ฒ์ฉ์ ์ธ ํํ์ Collection..
// MyCollection.java
package com.programmers.java.collection;
import com.programmers.java.iter.MyInterator;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
public class MyCollection<T> {
private List<T> list;
public MyCollection(List<T> list){
this.list = list;
}
public MyCollection<T> filter(Predicate<T> predicate){
List<T> newList = new ArrayList<>();
foreach(d -> {
if (predicate.test(d)) { //test ๊ฐ -> ํํฐ๊ฐ ์ฐธ์ด๋ฉด
newList.add(d);
}
});
return new MyCollection<>(newList);
}
// ์ด ๋ฉ์๋์์ <U>๋ฅผ ์ ๋ค๋ฆญ์ผ๋ก ํ์ฉํด๋ผ
public <U> MyCollection<U> map(Function<T,U> function){
List<U> newList = new ArrayList<>();
foreach(d -> newList.add(function.apply(d)));
return new MyCollection<>(newList);
}
public void foreach(Consumer<T> consumer){
for (int i = 0; i < list.size(); i++){
T data = list.get(i);
consumer.accept(data);
}
}
int size(){
return list.size();
}
// ์ธํฐํ์ด์ค๋ฅผ ๋ฉ๊ฐ๋ณ์๋ก ๋ฃ์ด๋๋๋๊ฒ์ด๊ตฐ,,,,,,
public MyInterator<T> iterator(){
return new MyInterator<T>() {
private int idx = 0;
@Override
public boolean hasNext() {
return idx < list.size();
}
@Override
public T next() {
return list.get(idx++);
}
};
}
}
// Main.java
package com.programmers.java.collection;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// MyCollection<String> c1 = new MyCollection<>(Arrays.asList("11","2222","3","444","5"));
// c1.foreach(str -> System.out.println(str));
//
// MyCollection<Integer> c2 = c1.map(str ->str.length());
// c2.foreach(str -> System.out.println(str));
/////////////////////////////////////////
// ๋ฉ์๋ ์ฒด์ด๋ ๋ฐฉ์
int s = new MyCollection<>(Arrays.asList("11","2222","3","444","5"))
.map(str ->str.length())
.filter(i ->i%2 == 1)
.size();
System.out.println(s);
//.foreach(str -> System.out.println(str));
}
}
⇒ ์ด๋ค ์ข ๋ฅ์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค๋๋ผ๋ ์ฒ๋ฆฌํ ์ ์๋๋ก.
⇒ Mycollection class์ ๋ด์ฉ์์ฒด๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ์ฌํ์ฉ ๊ฐ๋ฅ!!
Collection์ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ ๐
2. Iterator
์ฌ๋ฌ ๋ฐ์ดํฐ์ ๋ฌถ์์ ํ์ด์ ํ๋์ฉ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ์ ๊ณต
- next()๋ฅผ ํตํด์ ๋ค์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ์ ์์ต๋๋ค.
- ์ญ์ผ๋ก ์์ง์ผ ์ ์์ต๋๋ค. (์ด์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ์ ์๋ค.)
public class Main {
public static void main(String[] args) {
List<String> list = Arrays.asList("A","CC","BF","DFD");
Iterator<String> iter = list.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
}
}
๋ฐ์ดํฐ ํ๊ฑดํ๊ฑด์ ๋ํ ๋๋ฏธ ์ฒ๋ฆฌ๋ ํ ์ ์๋ค.
3. Stream
๋ฐ์ดํฐ์ ์ฐ์์ด๋ค. ๋์ด์ง์ง์๋ ๋ฐ์ดํฐ์ ํ๋ฆ
- System.in / System.out
- Collections.stream() ์ ๊ณต (java 8 ์ด์)
- filter, map, forEach ๊ฐ์ ๊ณ ์ฐจํจ์(ํจ์๋ฅผ ์ธ์๋ก ๋ฐ๋ ํจ์)๊ฐ ์ ๊ณต๋ฉ๋๋ค.
public class Main {
public static void main(String[] args) {
Arrays.asList("SD","AA","GFE","WQW","q")
.stream()
.map(s -> s.length())
.filter(i -> i % 2 == 1)
.forEach(i -> System.out.println(i));
}
}
- list์ Stream (ํ๋ณํ)
Arrays.asList(1,2,3).stream();
// IntStream : primitive ํ์
์ ์ํ stream ํ์
IntStream s = Arrays.stream( new int [] {1,2,3});
Stream<Integer> ss = Arrays.stream( new int [] {1,2,3}).boxed();
// List<Integer> l = ss.collect(Collectors.toList());
ss.toArray(Integer[] :: new); // type์ ์ง์ ํด์ฃผ์ง ์์ผ๋ฉด Object
Array(๋ฐฐ์ด)์ List(๋ฆฌ์คํธ์ ์ฐจ์ด)
๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ ์งํฉ(String[] str)์ด๊ณ , ๋ฆฌ์คํธ๋ ์ธ๋ฑ์ค ์์ด ์์ฐจ์ ์ผ๋ก ์ ์ฅ๋๋ ๋ฐ์ดํฐ ์งํฉ(ArrayList<> str)๋๋ค. ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ๊ผญ ํ ๋นํด์ค์ผํ๋ฉฐ ๋ฉ๋ชจ๋ฆฌ์ ์ฐ์์ ์ผ๋ก ํ ๋น๋๋ค. ๋ฆฌ์คํธ๋ฅผ ๊ตฌํํ๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ Linked List์ด๋ฉฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ถ์ฐ ๋์ด ์ ์ฅ๋๋ค.
- Stream์ Stream.generate ์ Stream.iterate๋ก ๋ง๋ค ์ ์๋ค.
Stream.generate(()-> 1)
.limit(10)
.forEach(System.out::println);
Stream.iterate(0,(i) -> i+1)
.limit(10)
.forEach(System.out::println); //seed ๊ฐ๋ถํฐ
- ์คํธ๋ฆผ์ ์ฌ์ฉํ๋ฉด ์ฐ์๋ ๋ฐ์ดํฐ์ ๋ํด์ ํ๋ถํ ๊ณ ์ฐจํจ์๋ค์ ์ฌ์ฉํ์ฌ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ๊ฐ๊ฒฐํ๊ฒ ํํํ ์ ์์ต๋๋ค.
Collection.forEach์ Stream.forEach์ ์ฐจ์ด.....์ถ๊ฐ์์
https://dundung.tistory.com/247
4. Optioal
- NPE : Null Pointer Exception → ๊ฐ์ฅ ๋ง์ด ๋๋ ์๋ฌ์ค ํ๋
- ์๋ฐ์์๋ (๊ฑฐ์) ๋ชจ๋ ๊ฒ์ด ๋ ํผ๋ฐ์ค ⇒ (๊ฑฐ์) ๋ชจ๋ ๊ฒ์ด null์ด ๋ ์ ์๋ค.
- ์ด์ ๋ถํฐ null์ ์ฐ์ง๋ง์ → ์ฝ์ : ๊ณ์ฝ์ ํ๊ณ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ค.
- EMPTY ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์.
// User.java
public class User {
public static User EMPTY = new User(0,"");
private int age;
private String name;
}
// Main.java
public class Main {
public static void main(String[] args) {
User user = User.EMPTY;
if (user != User.EMPTY){ ...
}
}
}
2. Optional์ ์ฌ์ฉํ๋ค.
public static void main(String[] args) {
// ๊ฐ์ด ์์๋
Optional<User> optionalUser = Optional.empty();
// ๊ฐ์ด ์์๋
optionalUser = Optional.of(new User(5,"kim"));
optionalUser.isEmpty(); // ๊ฐ์ด ์์ผ๋ฉด(==null) ture
optionalUser.isPresent(); // ๊ฐ์ด ์์ผ๋ฉด ture
optionalUser.ifPresent(user -> {});
optionalUser.ifPresentOrElse(user -> {}, () ->{});
}
'Back-end ๋ฐ๋ธ์ฝ์ค > week 01 - 02 TIL (java, DB)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] 221024 - ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์๊ฐ (0) | 2022.10.24 |
---|---|
[TIL] 221021 - Java ์ค์ต ํ๋ก์ ํธ : ์ซ์์ผ๊ตฌ ๊ฒ์ (0) | 2022.10.21 |
[TIL] 221019 - Java์ Interface (0) | 2022.10.19 |
[TIL] 221018 - Java์ OOP (2) | 2022.10.18 |
[TIL] 221017 - Java ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ (0) | 2022.10.18 |
๋๊ธ