小编aph*_*rid的帖子

Java - 解析日期/期间的优雅方式?

根据ISO-8601标准,有4种表达间隔/持续时间的方式:

  1. 开始和结束,例如"2007-03-01T13:00:00Z/2008-05-11T15:30:00Z"

  2. 开始和持续时间,例如"2007-03-01T13:00:00Z/P1Y2M10DT2H30M"

  3. 持续时间和结束,例如"P1Y2M10DT2H30M/2008-05-11T15:30:00Z"

  4. 持续时间,例如"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...东西.

java datetime duration period java-8

11
推荐指数
1
解决办法
1088
查看次数

Android Studio 不断向 GitHub 添加其他文件

我正在使用 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)

git android github android-studio

5
推荐指数
1
解决办法
2757
查看次数

性能/可读性:嵌套 for 循环与 HashMap

(注意:抱歉,如果我把这个问题放在错误的堆栈交换上,如果这个问题应该去其他地方,我会重新发布它......)

我刚刚开始在一家科技公司的第一次实习,想询问有关代码性能和/或编码实践的问题。我正在查看一位高级开发人员编写的代码,该代码在性能方面对我来说似乎不合适,但我不确定这是因为我缺乏经验还是他的代码。

这是我正在查看的代码:

// 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)

java performance dictionary list time-complexity

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

Haskell-具有函数构造函数的数据类型上的自定义仿函数实例

我无法为自定义数据类型编写自己的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)

haskell functor

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