回答編集履歴

3

コードのどんくさいところを変更

2018/03/24 13:56

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -52,7 +52,7 @@
52
52
 
53
53
  to.map(d -> "DATE <= " + fmt(d))
54
54
 
55
- ).flatMap(os -> os.stream()).collect(Collectors.joining(" AND "));
55
+ ).flatMap(Optional::stream).collect(Collectors.joining(" AND "));
56
56
 
57
57
  }
58
58
 
@@ -91,3 +91,15 @@
91
91
  ---
92
92
 
93
93
  追記:Java9前提です。Java8にはOptional#stream()がありませんので。
94
+
95
+
96
+
97
+ ---
98
+
99
+ 追記2:Java8で上記の方針とするならちょっと長めのコードになりますね。
100
+
101
+ `.flatMap(Optional::stream).~`
102
+
103
+ =>
104
+
105
+ `.flatMap(o -> o.map(Stream::of).orElseGet(Stream::empty)).~`

2

日付のフォーマットあまりにひどいので訂正

2018/03/24 13:56

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -8,13 +8,27 @@
8
8
 
9
9
  ```java
10
10
 
11
+ import java.sql.Date;
12
+
13
+ import java.text.ParseException;
14
+
15
+ import java.text.SimpleDateFormat;
16
+
17
+ import java.util.Optional;
18
+
19
+ import java.util.stream.Collectors;
20
+
21
+ import java.util.stream.Stream;
22
+
23
+
24
+
11
25
  public class Boo {
12
26
 
13
27
  public static void main(String[] args) {
14
28
 
15
- Optional<Date> d1 = Optional.of(new Date(2018, 1, 3));
29
+ Optional<Date> d1 = Optional.of(new Date(sdf.parse("2018-01-01").getTime()));
16
30
 
17
- Optional<Date> d2 = Optional.of(new Date(2018, 2, 4));
31
+ Optional<Date> d2 = Optional.of(new Date(sdf.parse("2018-02-02").getTime()));
18
32
 
19
33
  Optional<Date> dn = Optional.empty();
20
34
 
@@ -60,11 +74,11 @@
60
74
 
61
75
  ==>
62
76
 
63
- DATE >= 3918-02-03 AND DATE <= 3918-03-04
77
+ DATE >= 2018-01-01 AND DATE <= 2018-02-02
64
78
 
65
- DATE >= 3918-02-03
79
+ DATE >= 2018-01-01
66
80
 
67
- DATE <= 3918-03-04
81
+ DATE <= 2018-02-02
68
82
 
69
83
 
70
84
 

1

追記

2018/03/24 13:19

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -71,3 +71,9 @@
71
71
  ---
72
72
 
73
73
  ご質問にあるコードからPreparedStatementのsetDateは使わない想定のようでしたので、日付はリテラルとしてフォーマットするようなコードにしています。フォーマットの仕方そのものはいいかげんです。
74
+
75
+
76
+
77
+ ---
78
+
79
+ 追記:Java9前提です。Java8にはOptional#stream()がありませんので。