回答編集履歴
3
コードのどんくさいところを変更
test
CHANGED
@@ -52,7 +52,7 @@
|
|
52
52
|
|
53
53
|
to.map(d -> "DATE <= " + fmt(d))
|
54
54
|
|
55
|
-
).flatMap(os
|
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
日付のフォーマットあまりにひどいので訂正
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
|
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
|
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 >=
|
77
|
+
DATE >= 2018-01-01 AND DATE <= 2018-02-02
|
64
78
|
|
65
|
-
DATE >=
|
79
|
+
DATE >= 2018-01-01
|
66
80
|
|
67
|
-
DATE <=
|
81
|
+
DATE <= 2018-02-02
|
68
82
|
|
69
83
|
|
70
84
|
|
1
追記
test
CHANGED
@@ -71,3 +71,9 @@
|
|
71
71
|
---
|
72
72
|
|
73
73
|
ご質問にあるコードからPreparedStatementのsetDateは使わない想定のようでしたので、日付はリテラルとしてフォーマットするようなコードにしています。フォーマットの仕方そのものはいいかげんです。
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
---
|
78
|
+
|
79
|
+
追記:Java9前提です。Java8にはOptional#stream()がありませんので。
|