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

回答編集履歴

3

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

2018/03/24 13:56

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

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(os -> os.stream()).collect(Collectors.joining(" AND "));
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

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

2018/03/24 13:56

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

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, 1, 3));
15
+ Optional<Date> d1 = Optional.of(new Date(sdf.parse("2018-01-01").getTime()));
9
- Optional<Date> d2 = Optional.of(new Date(2018, 2, 4));
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 >= 3918-02-03 AND DATE <= 3918-03-04
39
+ DATE >= 2018-01-01 AND DATE <= 2018-02-02
33
- DATE >= 3918-02-03
40
+ DATE >= 2018-01-01
34
- DATE <= 3918-03-04
41
+ DATE <= 2018-02-02
35
42
 
36
43
  ---
37
44
  ご質問にあるコードからPreparedStatementのsetDateは使わない想定のようでしたので、日付はリテラルとしてフォーマットするようなコードにしています。フォーマットの仕方そのものはいいかげんです。

1

追記

2018/03/24 13:19

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

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()がありませんので。