标签: java-8

在Java 8/jsr310中格式化持续时间

我正在将项目从Joda-Time过渡到java8的本地时间库,我遇到了麻烦.我一直无法找到持续时间的格式化程序.我想有一个自定义字符串格式,例如,HHH + MM,其中75小时和15分钟的持续时间格式为"75 + 15".通过转换为句点并使用PeriodFormatter,使用Joda-Time很容易,但我无法在Java8中找到这种类型的类.我错过了什么吗?

java duration jodatime java-8 java-time

37
推荐指数
4
解决办法
3万
查看次数

如何在Java 8中动态进行过滤?

我知道在Java 8中,我可以像这样过滤:

List<User> olderUsers = users.stream().filter(u -> u.age > 30).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

但是,如果我有一个集合和六个过滤标准,我想测试标准的组合怎么办?

例如,我有一组对象和以下标准:

<1> Size
<2> Weight
<3> Length
<4> Top 50% by a certain order
<5> Top 20% by a another certain ratio
<6> True or false by yet another criteria
Run Code Online (Sandbox Code Playgroud)

我想测试上述标准的组合,例如:

<1> -> <2> -> <3> -> <4> -> <5>
<1> -> <2> -> <3> -> <5> -> <4>
<1> -> <2> -> <5> -> <4> -> <3>
...
<1> -> <5> -> <3> -> <4> -> <2>
<3> …
Run Code Online (Sandbox Code Playgroud)

java lambda filtering java-8

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

升级到Java8后,javac仍显示1.7

我在OSX上从JDK 1.7升级到问题 - > 1.8.升级已经完成,但javac仍然返回1.7作为版本.

我从Oracle的主页下载了JDK 8_u5,然后运行安装程序.

我还在安装后采取了以下步骤:

> export JAVA_HOME=`/usr/libexec/java_home -v 1.8`  (Executed in my .bashrc file)

> echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home

> javac -version
javac 1.7.0_21

> $JAVA_HOME/bin/javac -version
javac 1.7.0_21

> $JAVA_HOME/bin/java -version    
java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)
Run Code Online (Sandbox Code Playgroud)

我已经完成并删除了Java 1.7(和所有其他JDK版本),然后重新运行安装程序:

> ls /Library/Java/JavaVirtualMachines
jdk1.8.0_05.jdk
Run Code Online (Sandbox Code Playgroud)

仍然没有用,javac报告版本为1.7.0_21

> which javac
/usr/bin/javac

> ls -ltra /usr/bin/javac 
[snipped] /usr/bin/javac -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javac
Run Code Online (Sandbox Code Playgroud)

在该路径中,Current是一个符号链接A.内容A/Commands …

java macos java-8

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

像Java一样用Java lambdas分组和汇总对象?

我有一个Foo包含这些字段的课程:

id:int/name; String/targetCost:BigDecimal/actualCost:BigDecimal

我得到了这个类的对象的arraylist.例如:

new Foo(1, "P1", 300, 400), 
new Foo(2, "P2", 600, 400),
new Foo(3, "P3", 30, 20),
new Foo(3, "P3", 70, 20),
new Foo(1, "P1", 360, 40),
new Foo(4, "P4", 320, 200),
new Foo(4, "P4", 500, 900)
Run Code Online (Sandbox Code Playgroud)

我想通过创建"targetCost"和"actualCost"的总和并将"行"分组来转换这些值,例如

new Foo(1, "P1", 660, 440),
new Foo(2, "P2", 600, 400),
new Foo(3, "P3", 100, 40),
new Foo(4, "P4", 820, 1100)
Run Code Online (Sandbox Code Playgroud)

我现在写的:

data.stream()
       .???
       .collect(Collectors.groupingBy(PlannedProjectPOJO::getId));
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

java lambda java-8 java-stream

37
推荐指数
4
解决办法
4万
查看次数

年代和周年之间的差异?

Java的8位的DateTimeFormatter类有一个方法,ofPattern(String pattern)即让您从一串定义的格式A-z,a-z信件.这些例子并没有明确的区别y,今年的时代Y,以星期为一年.它是什么?

Symbol  Meaning                     Presentation      Examples
------  -------                     ------------      -------
 y       year-of-era                 year              2004; 04
 Y       week-based-year             year              1996; 96
Run Code Online (Sandbox Code Playgroud)

java datetime date java-8 java-time

37
推荐指数
3
解决办法
7792
查看次数

如何使用流对Map中的值求和?

我想要一个与流相当的:

public static <T extends Number> T getSum(final Map<String, T> data) {
    T sum = 0;
    for (String key: data.keySet())
        sum += data.get(key);
    return sum;
}
Run Code Online (Sandbox Code Playgroud)

这段代码实际上并没有编译,因为0不能分配给类型T,但你明白了.

java generics java-8 java-stream

37
推荐指数
3
解决办法
5万
查看次数

流列表成一组

我想重构我在一些代码中使用流的方式.第一个例子是我目前是如何做到的.第二个例子就是我试图让它看起来像.

Set<String> results = new HashSet<String>();

someDao.findByType(type)
            .stream()
            .forEach(t-> result.add(t.getSomeMethodValue()) );
Run Code Online (Sandbox Code Playgroud)

它看起来像这样吗?如果是这样我该怎么做呢?

Set<String> results = someDao.findByType(type)
            .stream()
            .collect(  /*  ?? no sure what to put here  */ );
Run Code Online (Sandbox Code Playgroud)

java collections lambda java-8 java-stream

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

OptionalInt vs Optional <Integer>

当滚动浏览java.util包的文档时,我很惊讶地发现它Optional<T>并且OptionalInt彼此没有任何关系.这似乎很难相信,因为它表明它们是不相关的类.

  1. 为什么他们没有共同的界面,类,子类型,或者什么东西来揭示他们的关系?(当你看他们的用途时,他们是非常相似的课程.)
  2. 另外,为什么需要额外的OptionalInt课程呢?为什么你不能使用Optional<Integer>?我认为这是因为它int是原始的,但没有OptionalChar这样的设计选择是不一致的.

java generics language-design java-8

37
推荐指数
3
解决办法
9436
查看次数

在mac os sierra更新面临与Intellij等Java应用程序的滚动问题

最近的更新,Mac os Sierra,对于我的Macbook专业版,我正面临着所有Java应用程序(如Intellij IDEA社区版)的滚动问题.

编辑器窗格中的滚动非常快.滚动增量的单位似乎很大.

Intellij IDEA版本是2016.2.3.Java版本是Java 8 Update 10.1.

即使在"系统首选项" - >"Java" - >"高级"选项卡中,我也会看到相同的行为.

swing intellij-idea jscrollpane java-8 macos-sierra

37
推荐指数
2
解决办法
5179
查看次数

包含自身作为元素的 ArrayList 的哈希码

我们可以发现hashcodelist是本身含有的element

我知道这是一个不好的做法,但这是面试官问的。

当我运行以下代码时,它会抛出一个StackOverflowError

public class Main {
    public static void main(String args[]) {
        ArrayList<ArrayList> a = new ArrayList();
        a.add(a);
        a.hashCode();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我有两个问题:

  1. 为什么有一个StackOverflowError
  2. 是否可以通过这种方式找到哈希码?

java stack-overflow hashcode java-8

37
推荐指数
4
解决办法
3286
查看次数