回答編集履歴

1

コード化

2016/11/17 16:09

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -4,4 +4,70 @@
4
4
 
5
5
  2のデータの2つのタイトルをキーに、1のマップから取り出して比較する。
6
6
 
7
+ ```java
8
+
9
+ public class Q55452 {
10
+
11
+
12
+
13
+ public static void main(String[] args) {
14
+
15
+ // まずはタイトル-本文長さのマッピングを作成
16
+
17
+ Map<String, Integer> map = new HashMap<>();
18
+
19
+ try (BufferedReader br = new BufferedReader(new FileReader("title1.txt"))) {
20
+
21
+ String data;
22
+
23
+ while ((data = br.readLine()) != null) {
24
+
25
+ String[] d = data.split(",");
26
+
27
+ try {
28
+
29
+ map.put(d[1], Integer.valueOf(d[0]));
30
+
31
+ } catch (NumberFormatException e) { }
32
+
33
+ }
34
+
35
+ } catch (IOException e) {
36
+
37
+ e.printStackTrace();
38
+
39
+ }
40
+
41
+ // リンク先・リンク元のタイトルから本文長さを引き出して比較する
42
+
43
+ // リンク先が短ければ-1,同じなら0,リンク元が短ければ1になり、どちらかが存在しない記事ならばnull
44
+
45
+ try (BufferedReader br = new BufferedReader(new FileReader("title2.txt"))){
46
+
7
- 比較にはInteger.compareを使うと1行で書ける。
47
+ List<Integer> list = br.lines()
48
+
49
+ .map(x -> Arrays.stream(x.split(","))
50
+
51
+ .map(y -> Optional.ofNullable(map.get(y)))
52
+
53
+ .collect(Collectors.toList()))
54
+
55
+ .map(l -> l.get(0).flatMap(x -> l.get(1).map(y -> x.compareTo(y))).orElse(null))
56
+
57
+ .collect(Collectors.toList());
58
+
59
+ } catch (IOException e) {
60
+
61
+ e.printStackTrace();
62
+
63
+ }
64
+
65
+
66
+
67
+ }
68
+
69
+
70
+
71
+ }
72
+
73
+ ```