标签: java-8

为什么顺序流和并行流的减少结果不同?

我有以下列表integers(所有数字从0到999,999):

List<Integer> integers = new ArrayList<>();
for (int i = 0; i != 10_000_000; ++i) {
    integers.add(i);
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试将以下内容作为Java 8 Stream运行:

int sum = 0;
for (Integer i : integers) {
    sum = i % 2 == 0 ? i - sum : i + sum;
}
System.out.println(sum);
Run Code Online (Sandbox Code Playgroud)

我期待以下输出:

0 - 0 = 0  
1 + 0 = 1  
2 - 1 = 1   
3 + 1 = 4  
4 - 4 = 0  
5 + 0 = …
Run Code Online (Sandbox Code Playgroud)

java parallel-processing java-8 java-stream

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

为什么递归调用此函数不会抛出NullPointerException

我的问题来自这个帖子.

考虑以下代码:

public class Test {    
    static Function<Integer, Integer> fibLambda = null;
    public static void main (String[] args) { 
        fibLambda = n -> n <= 2 ? 1 : fibLambda.apply(n - 1) + fibLambda.apply(n - 2); 
        System.out.println(fibLambda.apply(6));
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的输出是8.

我没有得到的是如何fibLamdba初始化?似乎我完全错过了方法调用是如何完成的,因为我虽然这个代码会产生一个NPE.

希望我的问题很明确

java method-invocation java-8

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

Java 8无符号整数加法和潜在溢出

我正在使用Cay S. Horstmann的书"Java SE 8 for the Really Impatient"进行练习.基于Number课程改进的练习之一是:

编写一个程序,使用值和无符号运算对0到2 32 - 1 之间的数字进行相加,减法,除法和比较int.说明原因divideUnsigned并且remainderUnsigned是必要的.

问题是,如果添加2个无符号整数,则总和可能溢出整数限制.我没有看到一种方法来防止这种情况,如果不使用long来存储总和并检查它是否大于Integer.MAX_VALUE.是否可以仅使用整数执行此操作?

numbers integer-overflow addition unsigned-integer java-8

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

.forEach和.sort不起作用,无法在块中设置断点

我正在使用Java 8(build 1.8.0_25),Netbeans 8.0.2,并将一些Java 8功能集成到现有应用程序中.排序和.forEach不起作用,所以我创建了一些测试代码,以确保我理解lambdas等,并诊断问题.下面是新代码和代码的混合,以便与我的系统中的数据进行交互:

  public void test(Registration reg) {
/* new code */
    List<String> family = new ArrayList<>();
    family.add("Mom");
    family.add("Dad");
    family.add("Brother");
    family.add("Sister");

    family.forEach(p -> System.out.println(p));

    Collections.sort(family, (p1,p2) -> {
        System.out.println(p1 + " <==> "+ p2);
        return p1.compareToIgnoreCase(p2);
            });

    family.forEach(p -> System.out.println(p));

/* code to test with my system data */
    List<RegistrationItem> item = new ArrayList<>();
    List<RegistrationItem> regI = reg.getRegistrationItem();

    regI.forEach(p -> {
        System.out.println(p.toString());
        item.add(p);
            });

    Collections.sort(regI, (r1,r2) -> {
        System.out.println(r1.toString() + r2.toString());
        return r1.getId().compareTo(r2.getId());
    });

    for (RegistrationItem r : …
Run Code Online (Sandbox Code Playgroud)

java collections jpa java-8 java-stream

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

Jackson Java 8 DateTime序列化

Jackson运行java.time.Instant,默认情况下启用WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS(READ_以及). 杰克逊-数据类型- jsr310

它像这样生成JSON

{ "createDate":1421261297.356000000, "modifyDate":1421261297.356000000 }

在JavaScript中,从传统的millis时间戳(而不是像上面的秒/纳米)那样获得Date要容易得多,比如new Date(1421261297356).

我认为应该有一些理由默认采用纳米方法,那么这是什么原因呢?

timestamp milliseconds java-8 jackson-modules java-time

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

收藏家.组合和地图

groupBy在用双打计算后,我很难为所有人命名.

persons.stream()
                .map(p -> (p.getHeight() * p.getWeight()))
                .collect(Collectors.groupingBy(Person::getName)));
Run Code Online (Sandbox Code Playgroud)

Stream<Double>不适用于这些论点.

如何处理整数/双精度然后处理groupBy String?

java java-8

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

Java 8-为什么他们提供方法参考?

有什么更好的电话

names.stream().forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

names.stream().forEach(n -> System.out.println(n));
Run Code Online (Sandbox Code Playgroud)

尽管事实上您必须编写更少的代码?在Java 8中引入方法引用还有其他优点吗?

java lambda java-8

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

关于将一个Double转换为Int的结果的Java标准

说我有以下......

double d = 1.6;
int q = ( ( int ) d );
Run Code Online (Sandbox Code Playgroud)

这总是会根据Java标准丢弃正好小数点,还是可以根据标准(或多或少存在)向上或向下舍入?

java standards standards-compliance java-8

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

等待加载完成时无法管理更新树单元格/项目图形

初始情况如下:

初始情况

现在,该树可能很大(例如,我有一棵具有2200万个节点的树)。这里发生的是,我使用jooq / h2后端存储所有节点并执行查询以查找子代。

这意味着在上图中,该节点被标记为可扩展,但尚未填充其子级。它是按需完成的。扩展后,我得到以下信息:

扩张后

我的问题是,扩张当然需要时间。我想做的是向的图形添加视觉提示,TreeItem以表明它正在加载...

而且我做不到。


好的,首先,对架构进行总体了解:

  • 简而言之,它是“具有被动观点的MVP”;
  • JavaFX所谓的“控制器”(在我的代码中由*Display类实现)是被动视图,其唯一作用是捕获UI事件并将其转发给*Presenter;这些类是“ GUI实现特定的”;
  • *Presenter发生反应,以通过排序这些事件*View类更新*Display;
  • 当任务需要一定的时间才能完成,而GUI无法保持交互性时,a BackgroundTaskRunner将用于*Presenter

    1. 指示*View修改UI以确认任务(在GUI线程上);
    2. 执行任务(在后台线程上);
    3. 指示*View任务完成时(在GUI线程上)修改UI;
    4. 如果任务失败,请指示*View(在GUI线程上)相应地修改UI。

使用JavaFX:

  • UI是一个*Display类;它由FXML文件定义并从中加载;
  • 类的(实现)对*View类中定义的所有GUI元素具有可见性*Display

*View类是事实上的接口; 这使我能够制作此程序的Webapp版本(计划中)。


现在,这段代码的上下文...

*Presenter*View并且*Display都涉及到“分析树”标签在上面的图像中可见。

考虑到上面的体系结构,问题在于*View类的实现以及*Display类。

*Display类有一个init()用来初始化所有相关的JavaFX组件,如果需要的话方法。在这种情况下,TreeView称为parseTree的初始化如下:

@Override
public void init()
{
    parseTree.setCellFactory(param …
Run Code Online (Sandbox Code Playgroud)

java javafx java-8 javafx-8

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

如何使用LocalTime在java中总结2个特定时间?

例:

LocalTime time1 = LocalTime.of(12, 30);
LocalTime time2 = LocalTime.of(8, 30);
time1 + time2   // Doesn't work.
time1.plus(time2)   // Doesn't work.
Run Code Online (Sandbox Code Playgroud)

因此,我希望以格式(小时:分钟)获得两次(12:30 + 8:30 = 21:00)的总和.

还有其他建议吗?

java localtime java-8

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