回答編集履歴
3
コードのどんくさいところを変更
answer
CHANGED
@@ -25,7 +25,7 @@
|
|
25
25
|
return Stream.of(
|
26
26
|
from.map(d -> "DATE >= " + fmt(d)),
|
27
27
|
to.map(d -> "DATE <= " + fmt(d))
|
28
|
-
).flatMap(
|
28
|
+
).flatMap(Optional::stream).collect(Collectors.joining(" AND "));
|
29
29
|
}
|
30
30
|
|
31
31
|
static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
@@ -44,4 +44,10 @@
|
|
44
44
|
ご質問にあるコードからPreparedStatementのsetDateは使わない想定のようでしたので、日付はリテラルとしてフォーマットするようなコードにしています。フォーマットの仕方そのものはいいかげんです。
|
45
45
|
|
46
46
|
---
|
47
|
-
追記:Java9前提です。Java8にはOptional#stream()がありませんので。
|
47
|
+
追記:Java9前提です。Java8にはOptional#stream()がありませんので。
|
48
|
+
|
49
|
+
---
|
50
|
+
追記2:Java8で上記の方針とするならちょっと長めのコードになりますね。
|
51
|
+
`.flatMap(Optional::stream).~`
|
52
|
+
=>
|
53
|
+
`.flatMap(o -> o.map(Stream::of).orElseGet(Stream::empty)).~`
|
2
日付のフォーマットあまりにひどいので訂正
answer
CHANGED
@@ -3,10 +3,17 @@
|
|
3
3
|
それはそれとして、以下のような感じではいかがでしょう
|
4
4
|
|
5
5
|
```java
|
6
|
+
import java.sql.Date;
|
7
|
+
import java.text.ParseException;
|
8
|
+
import java.text.SimpleDateFormat;
|
9
|
+
import java.util.Optional;
|
10
|
+
import java.util.stream.Collectors;
|
11
|
+
import java.util.stream.Stream;
|
12
|
+
|
6
13
|
public class Boo {
|
7
14
|
public static void main(String[] args) {
|
8
|
-
Optional<Date> d1 = Optional.of(new Date(2018
|
15
|
+
Optional<Date> d1 = Optional.of(new Date(sdf.parse("2018-01-01").getTime()));
|
9
|
-
Optional<Date> d2 = Optional.of(new Date(2018
|
16
|
+
Optional<Date> d2 = Optional.of(new Date(sdf.parse("2018-02-02").getTime()));
|
10
17
|
Optional<Date> dn = Optional.empty();
|
11
18
|
|
12
19
|
System.out.println(buildCondition(d1, d2));
|
@@ -29,9 +36,9 @@
|
|
29
36
|
}
|
30
37
|
```
|
31
38
|
==>
|
32
|
-
DATE >=
|
39
|
+
DATE >= 2018-01-01 AND DATE <= 2018-02-02
|
33
|
-
DATE >=
|
40
|
+
DATE >= 2018-01-01
|
34
|
-
DATE <=
|
41
|
+
DATE <= 2018-02-02
|
35
42
|
|
36
43
|
---
|
37
44
|
ご質問にあるコードからPreparedStatementのsetDateは使わない想定のようでしたので、日付はリテラルとしてフォーマットするようなコードにしています。フォーマットの仕方そのものはいいかげんです。
|
1
追記
answer
CHANGED
@@ -34,4 +34,7 @@
|
|
34
34
|
DATE <= 3918-03-04
|
35
35
|
|
36
36
|
---
|
37
|
-
ご質問にあるコードからPreparedStatementのsetDateは使わない想定のようでしたので、日付はリテラルとしてフォーマットするようなコードにしています。フォーマットの仕方そのものはいいかげんです。
|
37
|
+
ご質問にあるコードからPreparedStatementのsetDateは使わない想定のようでしたので、日付はリテラルとしてフォーマットするようなコードにしています。フォーマットの仕方そのものはいいかげんです。
|
38
|
+
|
39
|
+
---
|
40
|
+
追記:Java9前提です。Java8にはOptional#stream()がありませんので。
|