小编hai*_*isi的帖子

像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万
查看次数

如何收听 JavaFX tableview 中行的取消选择?

我有一个带有 SelectionMode.MULTIPLE 的 tableview:

    table.setEditable(true);
    table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

    table.getSelectionModel().selectedItemProperty().addListener(
            (observable, oldValue, newValue) -> {
                table.getSelectionModel().getSelectedItems().forEach(System.out::println);
            });
Run Code Online (Sandbox Code Playgroud)

选择行可以找到,但是如果再次取消选择一行(通过单击 ctrl+左键单击),侦听器不会立即对此做出反应。我必须做的取消选择一行如下:

  1. 选择让我们说“Rob”、“Peter”、“Max”和“John”(通过 ctrl+左键单击单独选择它们,或者通过 shift+左键单击将它们全部选择)
  2. 通过单击 ctrl+左键单击取消选择“Peter”(现在该行有一个奇怪的蓝色边框,并且侦听器没有检测到更改)
  3. 取消选择另一行(现在这一行有这个奇怪的边框,'Peter' 是行看起来正常)
  4. 重新选择上一行(现在侦听器检测到我未选择'Peter'
    在此处输入图片说明

java javafx java-8 javafx-8

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

标签 统计

java ×2

java-8 ×2

java-stream ×1

javafx ×1

javafx-8 ×1

lambda ×1