小编Thi*_*ler的帖子

映射ifPresent函数

如果地图的值存在,如何才能对地图的值执行,而不对地图进行任何更改?我希望使用'Java 8'声明式样式来做到这一点Optional.ifPresent().

我的用例如下:

我收到部分对象的更新(新的或删除的),我想与他们的父级注册这些更新.对于簿记,我有以下内容:

Map<ParentId, Parent> parents = ...
Run Code Online (Sandbox Code Playgroud)

收到新孩子时,我会做以下事情:

parents.computeIfAbsent(child.getParentId(), k -> new Parent()).addChild(child));
Run Code Online (Sandbox Code Playgroud)

但是为了删除我找不到声明函数.直截了当我将其实现为:

if(parents.containsKey(child.getParentId())
{
     parents.get(child.getParentId()).removeChild(child);
}
Run Code Online (Sandbox Code Playgroud)

或者我可以将值包装在Optional:

Optional.ofNullable(parents.get(child.getParentId()).ifPresent(p -> p.removeChild(child));
Run Code Online (Sandbox Code Playgroud)

请注意,Parent不是一个简单的列表,它包含的不仅仅是子项.所以以下不起作用(因为removeChild()不返回a Parent):

parents.computeIfPresent(child.getParentId(), (k, v) -> v.removeChild());
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做,或者没有相应的Optional.ifPresent()

java lambda dictionary java-8

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

Java Puzzler - 将double转换为int

int anInt = 1;
double aDouble = 2.5;

anInt = anInt + aDouble; // Error - need to cast double to int

anInt += aDouble; // This is ok. Why?

anInt = aDouble; // This is also an error.

anInt = 1 + aDouble; // This is also an error.
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:为什么不是编译错误anInt += aDouble呢?

java

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

使用PrimeFaces图表中的jqPlot插件在图表上绘制线条

我想在PrimeFaces(v5.3)图表上绘制一些额外的行,特别是在线图上.查看jqPlot示例(PrimeFaces使用jqPlot绘制图表),此示例显示了我想要做的事情.

我使用了这个答案中描述的方法.

通过设置扩展程序,我可以运行自己的javascript函数,这允许我更改不同类型的配置.

创建模式时的Java:

private LineChartModel initLinearModel()
{
    LineChartModel model = new LineChartModel();
    model.setExtender("chartExtender");

    LineChartSeries series1 = new LineChartSeries();
    series1.setLabel("Series 1");
    series1.set(1, 2);
    series1.set(2, 1);
    series1.set(3, 3);
    series1.set(4, 6);
    series1.set(5, 8);

    model.addSeries(series1);

    return model;
}
Run Code Online (Sandbox Code Playgroud)

XHTML:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui">

<h:outputScript library="jqplot-plugin"
    name="jqplot.canvasOverlay.min.js" />
<h:outputScript library="js" name="extra_config.js" />

<h:head>
    <title>Chart</title>
</h:head>

<h:body>

    <p:chart type="line" model="#{primeChart.lineModel1}"
        style="height:300px;" />

</h:body>

</html>
Run Code Online (Sandbox Code Playgroud)

Javascript功能:

function chartExtender() {
    this.cfg.grid = …
Run Code Online (Sandbox Code Playgroud)

jqplot primefaces jsf-2

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

我如何期望Google测试中出现多个失败?

我如何期望Google测试中出现多个失败?我在测试断言发生在被测代码中时使用此方法。因为这些断言不是致命的,所以可能会发生多种情况。

以下测试用例再现了这一点:

void failTwice()
{
   EXPECT_TRUE(false) << "fail first time";
   EXPECT_TRUE(false) << "fail second time";
}

TEST_F(FailureTest, testMultipleFails)
{
   EXPECT_NONFATAL_FAILURE(failTwice(), "time");
}
Run Code Online (Sandbox Code Playgroud)

这将产生以下输出:

gtest/src/gtest.cc:657: Failure
Expected: 1 non-fatal failure
  Actual: 2 failures
FailureTest.h:20: Non-fatal failure:
Value of: false
  Actual: false
Expected: true
fail first time

FailureTest.h:20: Non-fatal failure:
Value of: false
  Actual: false
Expected: true
fail second time
Run Code Online (Sandbox Code Playgroud)

问题是这样的:预期:1次非致命故障

我该如何告诉Google测试预期会出现多次失败?

c++ googletest

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

在Eclipse中运行@Ignored JUnit测试

在我的Eclipse项目(Eclipse Luna)中,有一些我不想在完整回归测试中运行的JUnit测试用例。例如,因为它们要求用户在场以验证结果(例如,如果正确播放了声音),或者因为它们仅在特定系统上正常运行。这些测试通常是在更改被测类时手动使用的。我曾经@Ignore无视那些测试。

当我从Eclipse运行带有忽略测试的类时(运行方式-> Junit测试),它将在测试列表中显示被忽略的测试。

有没有办法从Eclipse强制运行被忽略的测试?

目前,我总是删除@Ignored标记,但是很容易忘记在提交更改之前再次忽略测试。有一个更好的方法吗?

我希望Eclipse在JUnit视图中的忽略测试选项也可以运行“忽略的测试”,但我找不到它。

eclipse junit

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

为什么Mockito RETURNS_DEFAULT没有返回默认字符串?

在以下示例中(mockito 1.10.19):

    MyClass myClass = Mockito.mock(MyClass .class, RETURNS_DEFAULTS);
    String s = myClass.getName();
Run Code Online (Sandbox Code Playgroud)

为什么这会导致s == null而不是空字符串?

它确实承诺nullReturnsEmptyValues中使用String .但回归似乎很明显"",我想知道是否有理由不这样做.

编辑:从1.8更新版本到1.10.19,因为没有文档可用于1.8.

java mockito

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

泛型不适用于返回类型

为什么java不允许以下泛型返回类型:

public <T extends Enum<T> & MyInterface> Class<T> getEnum() {
    return MyEnum.class;
}
Run Code Online (Sandbox Code Playgroud)

虽然以下工作正常:

public <T extends Enum<T> & MyInterface> Class<T> getEnum(Class<T> t) {
    return t;
}

getEnum(MyEnum.class); 
Run Code Online (Sandbox Code Playgroud)

MyEnum是一个实现接口的enumaration MyInterface.

为什么我不被允许返回MyEnum.class

编辑:

我需要这个,因为该功能getEnum()在界面中.它可以定义如下:

@Override
public Class<MyEnum> getEnum() {
    return MyEnum.class;
}
Run Code Online (Sandbox Code Playgroud)

但那么接口方法的返回类型是什么才能允许Class类的任何对象同时包含枚举和实现MyInterface呢?

java enums

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

如何将“不安全”参数传递给 Java Webstart 应用程序的 JVM

我的 Java Webstart 应用程序在受控的可信环境中运行。这是一个封闭的内部网络,我可以在其中控制应用程序的启动方式。

我如何将 JVM 参数传递给应用程序,即使它们被 JVM 视为“不安全”以供 webstart 使用?

java jvm-arguments java-web-start

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