TIL 23.08.11

ν™©μ€ν•˜Β·2023λ…„ 8μ›” 11일
0

TIL

λͺ©λ‘ 보기
59/146

πŸ“ŒToday I Learned

μžλ°” μˆ˜μ—…(74~76)

Ex74_Stream

stream()

쀑간 νŒŒμ΄ν”„
.filter(Predicate)
.map(Function)
.sorted(Comparator)
.distinct()

μ΅œμ’… νŒŒμ΄ν”„
.count()/max()/min()/average()sum()
.allMatch()/anyMatch()/noneMatch()
.forEach()

배포

개발자의 μžλ°” μ†ŒμŠ€λ₯Ό λ‹€λ₯Έ κ°œλ°œμžμ—κ²Œ 전해쀄 λ•Œ
1. μ†ŒμŠ€ 자체λ₯Ό μ€€λ‹€ -> MyFile.java
2. μ»΄νŒŒμΌν•œ μ‹€ν–‰ νŒŒμΌμ„ μ „λ‹¬ν•œλ‹€. -> MyFile.class -> μ••μΆ•(1개 파일둜) -> *.jar (-> 이름은 λŒ€κ°œ ν”„λ‘œμ νŠΈ 이름을 μ†Œλ¬Έμžλ‘œ μ‚¬μš©ν•œλ‹€.) 받은 μ‚¬λžŒμ΄ μ†ŒμŠ€λ₯Ό μ•Œμ•„λ³Ό 수 μ—†λ‹€.

쀑볡 제거

  • distinct()

  • 쀑간 νŒŒμ΄ν”„

  • μ•žμ˜ μŠ€νŠΈλ¦Όμ—μ„œ 쀑볡 μš”μ†Œλ₯Ό μ œκ±°ν•˜κ³ , μœ μΌν•œ μš”μ†Œλ§Œ 남은 μƒˆλ‘œμš΄ μŠ€νŠΈλ¦Όμ„ λ°˜ν™˜ν•œλ‹€.

  • νŒŒμ΄ν”„λ“€μ˜ μˆœμ„œμ— 따라 μ „λ‹¬λ˜λŠ” 값이 λ‹¬λΌμ§€λ―€λ‘œ 쀑간 νŒŒμ΄ν”„μ˜ μˆœμ„œλ₯Ό μœ μ˜ν•˜μ—¬ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

  • 배열은 Arraysλ₯Ό μ‚¬μš©ν•˜μ—¬ stream을 μ–»λŠ”λ‹€.

  • Collection은 λ°”λ‘œ stream을 μ‚¬μš©ν•˜λ©΄ λœλ‹€.

//쀑볡값 제거

List<Integer> list = Data.getIntList();

//Case 1. set μ‚¬μš©ν•˜κΈ°
Set<Integer> set1 = new HashSet<>();
for (int n : list) {
	set1.add(n); // 쀑볡값 제거
}

//Case 2. Listλ₯Ό Set으둜 λ„£κΈ°
Set<Integer> set2 = new HashSet<>(list);

//Case 3. distinct() μ‚¬μš©ν•˜κΈ°
System.out.println(list.stream().distinct().count()); // 쀑볡값 걸러쀌

// Set, distinct() > 쀑볡 객체λ₯Ό μ œκ±°ν•˜λ €λ©΄?
// 1. hashCode() μž¬μ •μ˜
// 2. equals() μž¬μ •μ˜

맀핑

  • map(), mapXXX()(-> κ³ μ •λœ 값을 λŒλ €μ£ΌλŠ” λ©”μ†Œλ“œ)
  • 쀑간 νŒŒμ΄ν”„
  • λ³€ν™˜ μž‘μ—…
List<String> list = Data.getStringList(10);

//String μ—μ„œ Integer둜 ν˜•λ³€ν™˜
// λ‹¨μ–΄μ—μ„œ λ‹¨μ–΄μ˜ κΈ€μžμˆ˜λ‘œ λ³€κ²½λ˜μ—ˆλ‹€.
list.stream() // Stream<String>
		.map(word -> word.length()) // Stream<Integer>
		.forEach(n -> System.out.println(n));

μ •λ ¬

  • sorted()
  • 쀑간 νŒŒμ΄ν”„
  • λ°°μ—΄/μ»¬λ ‰μ…˜μ˜ sort()와 μ‚¬μš©λ²•μ΄ 동일 > Comparator κ΅¬ν˜„
Data.getIntList(10).stream()
		.sorted((a, b) -> b - a)
        .forEach(n -> System.out.println(n));

맀칭

  • allMatch(), anyMatch(), noneMatch()
  • μ΅œμ’… νŒŒμ΄ν”„
  • 슀트림 μš”μ†Œλ“€μ΄ μ œμ‹œν•œ 쑰건을 λ§Œμ‘±ν•˜λŠ”μ§€ 유무 νŒλ‹¨μ„ ν•œλ‹€.
  • a. boolean allMatch(Predicate) > λͺ¨λ“  μš”μ†Œκ°€ 쑰건을 100% 만쑱 (&& μ—°μ‚°)
  • b. boolean anyMatch(Predicate) > 일뢀 μš”μ†Œκ°€ 쑰건을 만쑱 (|| μ—°μ‚°)
  • c. boolean noneMatch(Predicate) > λͺ¨λ“  μš”μ†Œκ°€ 쑰건을 만쑱 X
// μš”κ΅¬μ‚¬ν•­] λ°°μ—΄ > 짝수만 μžˆλŠ”μ§€?
int[] nums = { 1, 2, 3, 4, 5 };

System.out.println(Arrays.stream(nums).allMatch(n -> n % 2 == 0)); // λͺ¨λ‘ 짝수?
System.out.println(Arrays.stream(nums).anyMatch(n -> n % 2 == 0)); // ν•˜λ‚˜λΌλ„ 짝수?
System.out.println(Arrays.stream(nums).noneMatch(n -> n % 2 == 0)); // λͺ¨λ‘ 짝수 μ•„λ‹˜?

if (Arrays.stream(nums).allMatch(n -> n % 2 == 0)) {
	System.out.println("짝수");
} else {
	System.out.println("ν™€μˆ˜");
}

집계, 톡계, Reduce

  • count(), max(), min(), sum(), avg()
  • μ΅œμ’… νŒŒμ΄ν”„
  • μš”μ†Œλ“€μ„ κ°€κ³΅ν•΄μ„œ 톡계값을 λ‚Έλ‹€.
System.out.println(Data.getIntList().stream().count());

System.out.println(Data.getIntList().stream().max((a, b) -> a - b).get()); // 99 -> int둜 λ³€κ²½

System.out.println(Data.getIntList().stream().min((a, b) -> a - b).get()); // 0

// sum, avgλŠ” 숫자일 λ•Œλ§Œ κ°€λŠ₯

int sum = Data.getIntList().stream().mapToInt(n -> n) // Stream<Integer>(x) IntStream(O) -> generic stream to
															// intstream
		.sum();
System.out.println(sum);

double avg = Data.getIntList().stream().mapToInt(n -> n).average().getAsDouble();
System.out.println(avg);

Ex75, 76 Dummy

ν”„λ‘œκ·Έλž¨ μ œμž‘μ— ν•„μš”ν•œ 데이터

  1. ν…ŒμŠ€νŠΈμš© 데이터 > 10%
  • μ§„μ§œ 데이터
  • μ‚¬λžŒμ΄ 직접 κΈ°μž…
  1. 더미 데이터 > 90%
  • μ–‘λ§Œ μ±„μš°λŠ” μš©λ„
  • ν”„λ‘œκ·Έλž¨μœΌλ‘œ μž‘μ„±

데이터 μƒμ„±ν•˜λŠ” 방법

a. "JavaTest > data > "member.txt" 파일 μƒμ„±ν•˜κΈ°
b. 1,홍길동,20, 010-1234-5678,μ„œμšΈμ‹œ 강남ꡬ 역삼동 > κ·œμΉ™μœΌλ‘œ 데이터λ₯Ό λ§Œλ“€ κ²ƒμœΌλ‘œ ν•œλ‹€.
c. μœ„μ˜ κ·œμΉ™λŒ€λ‘œ 데이터λ₯Ό μƒμ„±ν•œλ‹€.

-> 배열에 ν•„μš”ν•œ 단어듀을 ν•˜λ‚˜μ”© λ„£κ³ , λ‚œμˆ˜λ₯Ό 생성해 μƒμ„±λœ λ‚œμˆ˜λ₯Ό 인덱슀둜 μ ‘κ·Όν•˜μ—¬ 문자λ₯Ό ν•˜λ‚˜μ”© 뢙인 λ’€ νŒŒμΌμ— μ €μž₯ν•œλ‹€.


μ˜ˆμ‹œ

Random rnd = new Random();
String[] name1 = { "κΉ€", "이", "λ°•", "졜", "μ •", "ν™©", "μ‹ ", "ν˜„", "κΈΈ", "μ‘°" };
String[] name2 = { "은", "ν•˜", "수", "μ •", "μ£Ό", "원", "진", "λ―Ό", "인", "지", "석", "μ„­" };

String[] addr1 = { "μ„œμšΈμ‹œ", "μΈμ²œμ‹œ", "λΆ€μ‚°μ‹œ", "μˆ˜μ›μ‹œ", "λŒ€μ „μ‹œ", "κ΄‘μ£Όμ‹œ", "μ œμ£Όμ‹œ" };
String[] addr2 = { "쀑ꡬ", "강뢁ꡬ", "강남ꡬ", "κ°•μ„œκ΅¬", "강동ꡬ" };
String[] addr3 = { "역삼동", "λŒ€μΉ˜λ™", "압ꡬ정동", "μ²œν˜Έλ™", "방배동" };

BufferedWriter writer = new BufferedWriter(new FileWriter(".\\data\\member.txt"));

for (int i = 0; i < 100; i++) {
	// νšŒμ› 번호
	int no = i + 1;

	// νšŒμ›λͺ…
	String name = name1[rnd.nextInt(name1.length)] + name2[rnd.nextInt(name2.length)]
					+ name2[rnd.nextInt(name2.length)];

	// λ‚˜μ΄(20~60)
	int age = rnd.nextInt(41) + 20;

	// μ—°λ½μ²˜
	String tel = "010-" + (rnd.nextInt(9000) + 1000) + "-" + (rnd.nextInt(9000) + 1000);

	// μ£Όμ†Œ
	String address = addr1[rnd.nextInt(addr1.length)] + " " + addr2[rnd.nextInt(addr2.length)] + " "
					+ addr3[rnd.nextInt(addr3.length)] + " " + (rnd.nextInt(100) + 20) + "λ²ˆμ§€";
//	System.out.println(address);

	// b. 1,홍길동,20, 010-1234-5678,μ„œμšΈμ‹œ 강남ꡬ 역삼동 > κ·œμΉ™
	writer.write(String.format("%d,%s,%d,%s,%s\r\n", no, name, age, tel, address));
}
		
writer.close();

System.out.println("더미 데이터 생성 μ™„λ£Œ");

Open API μ‚¬μš©ν•˜κΈ°

OpenAPI, Open Application Programming Interface

  • 곡개된 ν”„λ‘œκ·Έλž˜λ° κΈ°λŠ₯
  • 곡곡 데이터 포털
  • ꡬ글, μ•„λ§ˆμ‘΄, 넀이버, λ‹€μŒ λ“±... > 지도

OpenAPI > 데이터 확보 > μ „λΆ€ μ§„μ§œ 데이터

JSON νŒŒμΌμ„ 읽어와 μ›ν•˜λŠ” 객체만 읽기

/*
	* { "name": "홍길동", "age": 20, "tel": ["010-1111-1111", "010-2222-2222",
	* "010-3333-3333"] }
	* 
	*/

	String json = "{\r\n" + "		 		\"name\": \"홍길동\",\r\n" + "		 		\"age\": 20,\r\n"
				+ "		 		\"tel\": [\"010-1111-1111\", \"010-2222-2222\", \"010-3333-3333\"]\r\n" + "		 	}";

	JSONParser parser = new JSONParser();

	try {
		JSONObject obj = (JSONObject) parser.parse(json); // down casting

		System.out.println(obj.get("name")); // property name = key
		System.out.println(obj.get("age")); // property name = key

		// array - JSONArray
		JSONArray arr = (JSONArray) obj.get("tel"); // down casting

		for (Object t : arr) {
			System.out.println(t);
		}

	} catch (ParseException e) {
		e.printStackTrace();
	}
}

Open API둜 자료 κ°€μ Έμ˜€κΈ°

Scanner scan = new Scanner(System.in);

System.out.println("[μ§€ν•˜μ²  정보 검색]");

System.out.print("μ—­ 검색: ");

String name = scan.nextLine();

// 1. μš”μ²­ URL λ§Œλ“€κΈ°
String url = "http://apis.data.go.kr/1613000/SubwayInfoService/getKwrdFndSubwaySttnList?"; // μš”μ²­μ£Όμ†Œ
url += "ServiceKey=CyGDxLq3m558%2BnuTh5ZIGVs1ZsV%2FJYNhvoIKPq4gnApUrtPtRi8tUaWziDwY%2BCrYVF%2BimSzN7lTocuLE0kVDzQ%3D%3D";

url += "&_type=json"; // 돌렀 λ°›λŠ” 데이터 = XML or JSON

url += "&numOfRows=10"; // 데이터λ₯Ό 10κ°œμ”© κ°€μ Έμ˜€κΈ°

url += "&pageNo=1"; // 첫번째 10개 1~10번째 데이터. λ§Œμ•½ 2λͺ… 11~20λ²ˆμ§Έλ°μ΄ν„°μž„

url += "&subwayStationName=" + URLEncoder.encode(name);

// QueryString - ? λ’€μ˜ κ°’
// http:\\data.go.kr\SttnList?ν‚€=데이터&ν‚€=데이터&ν‚€=데이터

// JSON
// 객체 {}
// 멀버 "name":"홍길동"
// λ°°μ—΄ []

// URL 객체 생성
try {
	// URL 객체 생성
	URL obj_url = new URL(url);

	// URLκ³Ό μ—°κ²°ν•˜λŠ” 객체 생성 > λΈŒλΌμš°μ € λŒ€μ‹  접속
	HttpURLConnection conn = (HttpURLConnection) obj_url.openConnection();

	conn.setRequestMethod("GET");
	conn.setRequestProperty("Content-type", "application/json");

	BufferedReader reader = null;

	if (conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
		reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
	} else {
		reader = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
	}

	JSONParser parser = new JSONParser();
	JSONObject root = (JSONObject) parser.parse(reader); // ν˜•λ³€ν™˜ 계속 ν•˜κΈ°
	JSONObject response = (JSONObject) root.get("response");
	JSONObject body = (JSONObject) response.get("body");
	JSONObject items = (JSONObject) body.get("items");

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

	// item이 객체일 μˆ˜λ„, 배열일 μˆ˜λ„ μžˆλ‹€. (1개일 λ•ŒλŠ” 객체, μ—¬λŸ¬κ°œμΌ λ•ŒλŠ” 배열이닀.)
	if (items.get("item") instanceof JSONObject) { // 1개인 경우
		JSONObject item = (JSONObject) items.get("item");

		System.out.println("1.");
		System.out.println("ν˜Έμ„ : " + item.get("subwayRouteName"));
		System.out.println("μ—­λͺ…: " + item.get("subwayStationName"));

				temp.add(item.get("subwayStationId").toString());
	} else {
		JSONArray arr = (JSONArray) items.get("item");
		int n = 1;
		for (Object obj : arr) {
			JSONObject item = (JSONObject) obj;
			System.out.println(n + ".");
			System.out.println("ν˜Έμ„ : " + item.get("subwayRouteName"));
			System.out.println("μ—­λͺ…: " + item.get("subwayStationName"));
			System.out.println("----------------");
			n++;

			temp.add((String) item.get("subwayStationId").toString());
		}
	}

	reader.close();
	conn.disconnect();
} catch (Exception e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}

ν”„λ‘œμ νŠΈ

νŒ€μ›λ“€κ³Ό 회의λ₯Ό 톡해 κΈ°νšμ„œλ₯Ό μΆ”κ°€ μž‘μ„±ν•˜μ˜€κ³ , μš”κ΅¬λΆ„μ„μ„œλ₯Ό μž‘μ„±ν–ˆλ‹€. ν•˜μ§€λ§Œ 아직 μ „λΆ€ μž‘μ„±ν•˜μ§€λŠ” λͺ»ν•΄μ„œ 좔후에 λ‹€μ‹œ 회의λ₯Ό ν•œ ν›„ μ™„μ„±ν•˜κΈ°λ‘œ ν•˜μ˜€λ‹€.

profile
μ°¨κ·Όμ°¨κ·Ό ν•˜λ‚˜μ”©

0개의 λŒ“κΈ€