小编jbx*_*jbx的帖子

`Optional.orElse()`和`Optional.orElseGet()`之间的区别

我试图理解Optional<T>.orElse()Optional<T>.orElseGet()方法之间的区别.

orElse()方法的描述是"如果存在则返回值,否则返回其他值".

虽然,该orElseGet()方法的描述是"如果存在返回值,否则调用other并返回该调用的结果".

orElseGet()方法采用供应商功能接口,基本上不接受任何参数和返回T.

你需要在哪种情况下使用orElseGet()?如果你有一个方法,你T myDefault()为什么不这样做optional.orElse(myDefault())而不是optional.orElseGet(() -> myDefault())

似乎没有orElseGet()将lambda表达式的执行推迟到以后的某个时间或什么的,所以有什么意义呢?(我本以为如果它返回一个更安全Optional<T>的东西会更有用,它get()永远不会抛出一个NoSuchElementException并且isPresent()总是返回真实......但显然它不是,它只是返回T就像orElse()).

我还缺少其他一些差异吗?

java optional java-8

183
推荐指数
6
解决办法
10万
查看次数

Jackson在Spring Boot中错误地序列化了ZonedDateTime

我有一个Spring Boot和Jetty的简单应用程序.我有一个简单的控制器返回一个具有Java 8的对象ZonedDateTime:

public class Device {
  // ...
  private ZonedDateTime lastUpdated;

  public Device(String id, ZonedDateTime lastUpdated, int course, double latitude, double longitude) {
    // ...
    this.lastUpdated = lastUpdated;
    // ...
  }

  public ZonedDateTime getLastUpdated() {
    return lastUpdated;
  }
}
Run Code Online (Sandbox Code Playgroud)

在我的RestController我只是有:

@RequestMapping("/devices/")
public @ResponseBody List<Device> index() {
  List<Device> devices = new ArrayList<>();
  devices.add(new Device("321421521", ZonedDateTime.now(), 0, 39.89011333, 24.438176666));

  return devices;
}
Run Code Online (Sandbox Code Playgroud)

我期望ZonedDateTime根据ISO格式进行格式化,但是我得到了类的整个JSON转储:

"lastUpdated":{"offset":{"totalSeconds":7200,"id":"+02:00","rules":{"fixedOffset":true,"transitionRules":[],"transitions":[]}},"zone":{"id":"Europe/Berlin","rules":{"fixedOffset":false,"transitionRules":[{"month":"MARCH","timeDefinition":"UTC","standardOffset":{"totalSeconds":3600,"id":"+01:00","rules":{"fixedOffset":true,"transitionRules":[],"transitions":[]}},"offsetBefore":{"totalSeconds":3600,"id":"+01:00","rules":{"fixedOffset":true,"transitionRules":[],"transitions":[]}},"offsetAfter":{"totalSeconds":7200,"id":"+02:00", ...
Run Code Online (Sandbox Code Playgroud)

我只是有一个spring-boot-starter-web应用程序,使用spring-boot-starter-jetty和排除spring-boot-starter-tomcat.

杰克逊为什么在Spring Boot中表现得像这样?

**更新** …

java json jackson spring-boot zoneddatetime

27
推荐指数
3
解决办法
2万
查看次数

即使使用相同的协议,Youtube"阻止带原点的帧"http://www.youtube.com"访问具有原点的帧"

嵌入Youtube播放列表时,我收到此错误:

Blocked a frame with origin "http://www.youtube.com" from accessing a frame with origin "http://www.mydomain.com". Protocols, domains, and ports must match.

我不是在任何地方将HTTP与HTTPS混合,所以我不知道为什么我首先得到这个错误.

我注意到最近Youtube嵌入式播放列表没有显示第一个视频的嵌入图像,只是显示带有"全部播放"按钮的黑屏,我想知道这是否是由上述错误引起的.

youtube youtube-api youtube-javascript-api

24
推荐指数
1
解决办法
2万
查看次数

如何创建 TimescaleDB Hypertable,并在非唯一时间戳上进行时间分区?

我刚刚开始使用 TimescaleDB,想要在包含事件的表上创建一个超表。最初我想到遵循以下常规模式:

CREATE TABLE event (
  id serial PRIMARY KEY,
  ts timestamp with time zone NOT NULL,
  details varchar(255) NOT NULL
);

CREATE INDEX event_ts_idx on event(ts);
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用以下查询创建超表时:

SELECT create_hypertable('event', 'ts');
Run Code Online (Sandbox Code Playgroud)

我有:ERROR: cannot create a unique index without the column "ts" (used in partitioning)

经过一些研究后,似乎时间戳本身需要成为主键(或主键的一部分)。

但是,我不希望时间戳ts是唯一的。这些高频事件很可能会在同一微秒(该timestamp类型的最大分辨率)内重合。这就是我首先研究 TimescaleDB 的全部原因。

在这种情况下,最佳实践是什么?

我在想也许保留serial id作为主键的一部分,并使其复合如下:

CREATE TABLE event_hyper (
  id serial,
  ts timestamp with time zone NOT NULL,
  details varchar(255) NOT NULL,
  PRIMARY KEY (id, ts)
); …
Run Code Online (Sandbox Code Playgroud)

postgresql timescaledb

23
推荐指数
1
解决办法
1万
查看次数

在TortoiseHG中禁用HTTPS主机身份验证以获取内部自签名证书

如何在TortoiseHG中禁用HTTPS主机身份验证以获取内部自签名证书.对于内部服务器,HTTPS主要用于加密.

TortoiseHG文档说可以在这里禁用主机验证(即验证证书颁发机构链),但我似乎无法找到该选项.

它应该是克隆远程存储库时的一个选项.我使用的是最新的TortoiseHG 2.0.5

mercurial tortoisehg tortoisehg-2.0

19
推荐指数
1
解决办法
2万
查看次数

使用Java 8集合流API进行堆栈

我有一个方法,每次执行它时都会生成一个对象,我需要颠倒我获取它们的顺序.所以我认为这样做的自然方式就是Stack,因为它是LIFO.

但是,Java Stack似乎不能很好地与新的Java 8流API一起使用.

如果我这样做:

   Stack<String> stack = new Stack<String>();
   stack.push("A");
   stack.push("B");
   stack.push("C");

   List<String> list = stack.stream().collect(Collectors.toList());
   System.out.println("Collected: " + list);
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

Collected: [A, B, C]
Run Code Online (Sandbox Code Playgroud)

为什么不以预期的LIFO顺序将它们输出到流中?这是将所有项目从堆栈清除到右(LIFO)顺序列表的正确方法吗?

java java-8 java-stream java-collections-api

19
推荐指数
1
解决办法
9267
查看次数

每次迁移Laravel多个表

我是Laravel的新手,对这个框架的最佳实践有点新意.我试图了解使用迁移创建数据库的最佳方法.

我在网上找到的几个例子,包括这里这里的Laravel文档,似乎都是指只处理一个表的迁移脚本.我正在创建一个包含大约10个表的应用程序,所有表都与它们之间的外键相互关联,其中一些表具有多对多关系.

  1. 建议的方法是每个表有一个迁移文件吗?如果是这样的话?(将所有表创建脚本放在一个文件中有什么缺点,如果有的话?)

  2. 外键和关系怎么样?如何强制执行这些关系,以及执行迁移的顺序,如果table1引用table2中的列,table2是否在table1之前创建?

  3. 那么多对多关系怎么样?是否需要通过单独的迁移脚本手动创建关系(数据透视)表?如果是,那么确保在2个相关表之后创建它?

php sql laravel

18
推荐指数
1
解决办法
1万
查看次数

将JNI库添加到本地Maven存储库

我希望使用Maven将JNI库(包括其共享对象(.so)文件)添加到我的项目中.不幸的是它还没有在公共存储库中,所以我想我必须自己在我的本地存储库上安装它才能使它工作.

如何将Maven中的本机部分包含在我的项目中(最终使用copy-dependencies插件导出).这是一个标准的J2SE应用程序(不是网络应用程序),包装.jar?

我想添加的库是junixsocket,以防它有助于了解.它有一个.so(本机库)组件和Java .jar组件.

我遇到了maven-nar-plugin,它似乎以本机构建为目标,但似乎更倾向于从代码构建JNI项目,而不是捆绑第三方JNI库,我无法将拼图拼凑在一起.

我该怎么做:

  1. 在我的本地存储库中安装这些,具有.jar取决于.so库.
  2. 在POM文件中包含依赖项(在.jar和.so上).

谢谢.

java java-native-interface maven maven-nar-plugin

17
推荐指数
2
解决办法
2万
查看次数

当对其中一个项目的检查返回false时,结束for-comprehension循环

我对Scala有点新意,所以如果这有点微不足道,请道歉.

我有一个我想要迭代的项目列表.我对每个项目执行检查,如果只有其中一个失败,我希望整个函数返回false.因此,您可以将此视为AND条件.我希望它被懒惰地评估,即我遇到第一个错误返回false的那一刻.

我习惯了for - yield过滤通过某个生成器生成的项目的语法(项目列表,序列等).在我的情况下,我只是想突破并返回false而不执行其余的循环.在普通的Java中,人们只会return false;在循环中执行一个操作.

以低效的方式(即当我遇到第一个假项目时不停止),我可以这样做:

   (for {
          item <- items
          if !satisfiesCondition(item)
        } yield item).isEmpty
Run Code Online (Sandbox Code Playgroud)

这基本上是说如果没有物品通过过滤器,它们都满足条件.但这似乎有点复杂和低效(考虑到你有100万件物品,第一件已经不满足条件).

在Scala中执行此操作的最佳和最优雅的方法是什么?

scala for-comprehension

15
推荐指数
2
解决办法
6634
查看次数

Laravel Eloquent模型中的字段

我是Laravel和Eloquent的新手,请原谅我这是一个完全愚蠢的问题.我一直在寻找如何创建在两个文件的模型在这里也另一个教程这里(使用ORM口才节中创建模型),我已经注意到,该表的实际字段都未曾提及,除非有什么具体关于它们(比如与另一个表有关系,或者不需要批量分配,或者是否需要隐藏JSON输出等)

是否故意省略这些字段,PHP只是在使用PDO FETCH_OBJ打开时执行查询时添加它们?如果是,为什么我们没有明确地将字段放在模型中?它不能帮助我们了解我们拥有哪些字段,以及PHPStorm等IDE可以弹出正确的自动完成字段吗?

如果确实需要它们,他们需要具备哪种访问级别?

谢谢.

php pdo laravel eloquent

13
推荐指数
1
解决办法
5959
查看次数