如果地图的值存在,如何才能对地图的值执行,而不对地图进行任何更改?我希望使用'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()
?
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
呢?
我想在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) 我如何期望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测试预期会出现多次失败?
在我的Eclipse项目(Eclipse Luna)中,有一些我不想在完整回归测试中运行的JUnit测试用例。例如,因为它们要求用户在场以验证结果(例如,如果正确播放了声音),或者因为它们仅在特定系统上正常运行。这些测试通常是在更改被测类时手动使用的。我曾经@Ignore
无视那些测试。
当我从Eclipse运行带有忽略测试的类时(运行方式-> Junit测试),它将在测试列表中显示被忽略的测试。
有没有办法从Eclipse强制运行被忽略的测试?
目前,我总是删除@Ignored
标记,但是很容易忘记在提交更改之前再次忽略测试。有一个更好的方法吗?
我希望Eclipse在JUnit视图中的忽略测试选项也可以运行“忽略的测试”,但我找不到它。
在以下示例中(mockito 1.10.19):
MyClass myClass = Mockito.mock(MyClass .class, RETURNS_DEFAULTS);
String s = myClass.getName();
Run Code Online (Sandbox Code Playgroud)
为什么这会导致s == null
而不是空字符串?
它确实承诺null
在ReturnsEmptyValues中使用String .但回归似乎很明显""
,我想知道是否有理由不这样做.
编辑:从1.8更新版本到1.10.19,因为没有文档可用于1.8.
为什么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 Webstart 应用程序在受控的可信环境中运行。这是一个封闭的内部网络,我可以在其中控制应用程序的启动方式。
我如何将 JVM 参数传递给应用程序,即使它们被 JVM 视为“不安全”以供 webstart 使用?
java ×5
c++ ×1
dictionary ×1
eclipse ×1
enums ×1
googletest ×1
java-8 ×1
jqplot ×1
jsf-2 ×1
junit ×1
lambda ×1
mockito ×1
primefaces ×1