根据ISO-8601标准,有4种表达间隔/持续时间的方式:
开始和结束,例如"2007-03-01T13:00:00Z/2008-05-11T15:30:00Z"
开始和持续时间,例如"2007-03-01T13:00:00Z/P1Y2M10DT2H30M"
持续时间和结束,例如"P1Y2M10DT2H30M/2008-05-11T15:30:00Z"
持续时间,例如"P1Y2M10DT2H30M",带有附加的上下文信息
仅使用Java 8(没有Joda,扩展等),是否有处理案例1-3的优雅方法?
我知道Duration.Parse()并且Period.Parse(),但我想知道是否有一种处理这4种情况的优雅方式.例如:
String datePeriod = "2016-07-21/P6D";
String twoDates = "2016-07-21/2016-07-25";
Duration d = Duration.parse(datePeriod); // DateTimeParseException
Duration p = Duration.parse(twoDates); // same
Run Code Online (Sandbox Code Playgroud)
我目前的思维过程非常草率,我百分百肯定有更好的方法.对于每种情况,使用嵌套的try/catch块分别处理4个案例,这看起来有点像反模式,如果有的话.(拆分/,解析第一个块的日期,检查错误,解析第一个块的时间段,解析第二个块的日期,检查错误......你明白了)
任何提示将非常感谢!
-
此外,ISO 8601时间间隔解析在Java中的答案并没有真正帮助我,因为最顶层的答案只关心这些PT...东西.
我正在使用 Android Studio 2.2.2,使用内置的 VCS 工具。出于某种原因,Android Studio 会自动添加一堆我没有添加或编辑的额外 xml 文件和文件夹。
更具体地说,当我不希望它添加以下文件时:
/_windows
IntelliLang.xml
debugger.xml
diff.xml
vcs.xml
web-browsers.xml
Run Code Online (Sandbox Code Playgroud)
这使得拉取请求完全不可能,因为主分支没有这些文件,而且我的其他组成员似乎也没有这个问题。
在删除/配置 Android Studio 以阻止这个讨厌的错误方面有什么帮助吗?
——
编辑:我已经在使用 gitignore 文件了。奇怪的是,我的附加文件也位于错误的文件夹中。基本上,我的根文件夹有一个用于我的应用程序的子文件夹。由于某种原因,Android Studio 在我的根文件夹中创建了所有垃圾文件。
/root/
/_windows
IntelliLang.xml
debugger.xml
diff.xml
vcs.xml
web-browsers.xml
/my_android_app/
gitignore for my app
/files actually needed for my project
Run Code Online (Sandbox Code Playgroud) (注意:抱歉,如果我把这个问题放在错误的堆栈交换上,如果这个问题应该去其他地方,我会重新发布它......)
我刚刚开始在一家科技公司的第一次实习,想询问有关代码性能和/或编码实践的问题。我正在查看一位高级开发人员编写的代码,该代码在性能方面对我来说似乎不合适,但我不确定这是因为我缺乏经验还是他的代码。
这是我正在查看的代码:
// Given the following:
List<TypeA> aList = (...)
List<TypeB> bList = (...)
for(TypeA obj : aList) {
boolean found = false;
for(TypeB obj2 : bList) {
if(obj.name.equals(obj2.name) {
found = true;
break;
}
}
if(!found) {
obj.doSomething();
someOtherList.add(obj);
}
}
Run Code Online (Sandbox Code Playgroud)
我的想法是 O(n^2) 嵌套 for 循环对于代码尝试执行的操作来说效率相当低。做这样的事情会更好吗?(另外,请不要介意任何语法错误,我正在即时输入此内容;)):
// Given the following:
List<TypeA> aList = (...)
List<TypeB> bList = (...)
Map<TypeB, String> bListToName = new HashMap<>()
bList.forEach(obj -> bListToName.put(obj, obj.name));
for(TypeA obj : aList) {
if(bListToName.get(obj.name) == null) {
obj.doSomething(); …Run Code Online (Sandbox Code Playgroud) 我无法为自定义数据类型编写自己的functor实例(无法更改)。数据类型定义为:
data Foo a = Baz String (Qux -> Foo a) | Bar a
data Qux = None | Quux String
Run Code Online (Sandbox Code Playgroud)
我的问题是为该Foo类型编写一个仿函数。具体来说,我不确定如何将functor函数正确地应用于f中的函数Foo。我正在考虑以某种方式在构造函数中调用该函数,但是由于没有Qux可用的,因此我陷入了困境。
instance Functor Foo where
fmap f (Bar a) = Bar (f a)
fmap f (Baz s ???) = Baz s (???) -- What goes here?
-- Clearly, something like this doesn't work
-- fmap f (Baz s g) = Baz s (f g)
-- I've also tried something like this, …Run Code Online (Sandbox Code Playgroud)