我试图理解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()).
我还缺少其他一些差异吗?
我有一个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中表现得像这样?
**更新** …
嵌入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嵌入式播放列表没有显示第一个视频的嵌入图像,只是显示带有"全部播放"按钮的黑屏,我想知道这是否是由上述错误引起的.
我刚刚开始使用 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) 如何在TortoiseHG中禁用HTTPS主机身份验证以获取内部自签名证书.对于内部服务器,HTTPS主要用于加密.
TortoiseHG文档说可以在这里禁用主机验证(即验证证书颁发机构链),但我似乎无法找到该选项.
它应该是克隆远程存储库时的一个选项.我使用的是最新的TortoiseHG 2.0.5
我有一个方法,每次执行它时都会生成一个对象,我需要颠倒我获取它们的顺序.所以我认为这样做的自然方式就是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)顺序列表的正确方法吗?
我是Laravel的新手,对这个框架的最佳实践有点新意.我试图了解使用迁移创建数据库的最佳方法.
我在网上找到的几个例子,包括这里和这里的Laravel文档,似乎都是指只处理一个表的迁移脚本.我正在创建一个包含大约10个表的应用程序,所有表都与它们之间的外键相互关联,其中一些表具有多对多关系.
建议的方法是每个表有一个迁移文件吗?如果是这样的话?(将所有表创建脚本放在一个文件中有什么缺点,如果有的话?)
外键和关系怎么样?如何强制执行这些关系,以及执行迁移的顺序,如果table1引用table2中的列,table2是否在table1之前创建?
那么多对多关系怎么样?是否需要通过单独的迁移脚本手动创建关系(数据透视)表?如果是,那么确保在2个相关表之后创建它?
我希望使用Maven将JNI库(包括其共享对象(.so)文件)添加到我的项目中.不幸的是它还没有在公共存储库中,所以我想我必须自己在我的本地存储库上安装它才能使它工作.
如何将Maven中的本机部分包含在我的项目中(最终使用copy-dependencies插件导出).这是一个标准的J2SE应用程序(不是网络应用程序),包装.jar?
我想添加的库是junixsocket,以防它有助于了解.它有一个.so(本机库)组件和Java .jar组件.
我遇到了maven-nar-plugin,它似乎以本机构建为目标,但似乎更倾向于从代码构建JNI项目,而不是捆绑第三方JNI库,我无法将拼图拼凑在一起.
我该怎么做:
谢谢.
我对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中执行此操作的最佳和最优雅的方法是什么?
java ×4
java-8 ×2
laravel ×2
php ×2
eloquent ×1
jackson ×1
java-stream ×1
json ×1
maven ×1
mercurial ×1
optional ×1
pdo ×1
postgresql ×1
scala ×1
spring-boot ×1
sql ×1
timescaledb ×1
tortoisehg ×1
youtube ×1
youtube-api ×1