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

回答編集履歴

2

最後のラムダ式を他の型にでも使えるよう修正

2017/06/27 15:43

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -51,7 +51,7 @@
51
51
  LocalDateTime result = now.with(t -> {
52
52
  LocalDateTime time = LocalDateTime.from(t);
53
53
  LocalDateTime r = time.with(LocalTime.of(9, 0));
54
- return r.isBefore(time) ? r.plusDays(1) : r;
54
+ return t.with(r.isBefore(time) ? r.plusDays(1) : r);
55
55
  });
56
56
  System.out.println(now);
57
57
  System.out.println(result);

1

書き方いろいろ

2017/06/27 15:43

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -6,4 +6,56 @@
6
6
  if (now.toLocalTime().isAfter(nine))
7
7
  result = result.plusDays(1);
8
8
  System.out.println(result);
9
+ ```
10
+ ---
11
+
12
+ withの引数にLocalTimeが渡せることに気づいて、いろいろ出てきた。mattnさんのをシンプルに書くと
13
+ ```java
14
+ import java.time.*;
15
+
16
+ public class LT2 {
17
+ public static void main(String[] args) {
18
+ LocalDateTime now = LocalDateTime.now();
19
+ now = now.plusHours(15).with(LocalTime.of(9, 0));
20
+ System.out.println(now);
21
+ }
22
+ }
23
+ ```
24
+ 私のコードもこうなる
25
+ ```java
26
+ import java.time.*;
27
+
28
+ public class LT3 {
29
+ public static void main(String[] args) {
30
+ LocalDateTime now = LocalDateTime.now();
31
+ LocalDateTime result = now.with(LocalTime.of(9, 0));
32
+ // 時刻を再設定した結果時間が巻き戻った場合、1日足す
33
+ if (result.isBefore(now)) {
34
+ result = result.plusDays(1);
35
+ }
36
+ System.out.println(result);
37
+ }
38
+ }
39
+ ```
40
+ 前者がif文もなくすっきり書けるけど、後者は時刻がいつになっても時刻を変えるだけで適用できる。
41
+
42
+ ちょっと背伸びして、[TemporalAdjuster](https://docs.oracle.com/javase/jp/8/docs/api/java/time/temporal/TemporalAdjuster.html)をラムダ式で書いてwithメソッドを使ってみた
43
+ ```java
44
+ import java.time.LocalDateTime;
45
+ import java.time.LocalTime;
46
+
47
+ public class Q81936 {
48
+
49
+ public static void main(String[] args) {
50
+ LocalDateTime now = LocalDateTime.now();
51
+ LocalDateTime result = now.with(t -> {
52
+ LocalDateTime time = LocalDateTime.from(t);
53
+ LocalDateTime r = time.with(LocalTime.of(9, 0));
54
+ return r.isBefore(time) ? r.plusDays(1) : r;
55
+ });
56
+ System.out.println(now);
57
+ System.out.println(result);
58
+ }
59
+
60
+ }
9
61
  ```