teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

第2案を追記

2020/01/06 07:45

投稿

xebme
xebme

スコア1109

answer CHANGED
@@ -36,4 +36,39 @@
36
36
  }
37
37
  ```
38
38
  自分の実力だとこの程度です。良い方法があればどうぞご提案ください。
39
- new SimpleEntry<>(s,null)に訂正しました。
39
+ new SimpleEntry<>(s,null)に訂正しました。
40
+
41
+ **Array2#asMap第2案(追記)**
42
+
43
+ 関数型プログラミングの常套句を使います。引数の配列の要素数が奇数の場合、最後の要素を切り捨てます。
44
+ ```Java
45
+ import java.util.Arrays;
46
+ import java.util.Map;
47
+ import java.util.Stack;
48
+ import java.util.TreeMap;
49
+ import java.util.function.BiConsumer;
50
+
51
+ public class Arrays2 {
52
+
53
+ private static <T> BiConsumer<Map<T,T>,T> memoConsumer() {
54
+ Stack<T> keyBuff = new Stack<>();
55
+ return (m,v) -> {
56
+ if (keyBuff.isEmpty()) {
57
+ keyBuff.push(v);
58
+ } else {
59
+ m.put(keyBuff.pop(),v);
60
+ }
61
+ };
62
+ }
63
+
64
+ public static <T> Map<T,T> asMap(T... array) {
65
+ Map<T,T> result = Arrays.asList(array).stream().collect(
66
+ TreeMap::new,
67
+ memoConsumer(),
68
+ Map::putAll
69
+ );
70
+ return result;
71
+ }
72
+
73
+ }
74
+ ```

1

new SimpleEntry<>(s,null)

2020/01/06 07:45

投稿

xebme
xebme

スコア1109

answer CHANGED
@@ -24,7 +24,7 @@
24
24
  ArrayList::new,
25
25
  (l,s) -> {
26
26
  if (ordinal.next()) { // 奇数番目
27
- l.add(new SimpleEntry(s,null));
27
+ l.add(new SimpleEntry<>(s,null));
28
28
  } else { // 偶数番目
29
29
  l.get(l.size()-1).setValue(s);
30
30
  }
@@ -35,4 +35,5 @@
35
35
  }
36
36
  }
37
37
  ```
38
- 自分の実力だとこの程度です。良い方法があればどうぞご提案ください。
38
+ 自分の実力だとこの程度です。良い方法があればどうぞご提案ください。
39
+ new SimpleEntry<>(s,null)に訂正しました。