我已经使用现有工作区迁移到Eclipse Photon.我在这个工作区中有一些Maven项目.所有项目在Eclipse Oxygen中都没有任何错误.打开我的工作区在Eclipse光子所有测试类,其进口之后org.mockito.Mockito,org.springframework.mock并org.springframework.test有错误.虽然Eclipse知道它们,但无法解析这些导入,因为我可以跳转到类中.
为什么Eclipse Photon无法解析这些导入?我该如何解决这个问题?
我读了一些关于如何创建有限的问题Stream(
在Java中有限生成的流 - 如何创建一个?,流如何停止?).
答案建议实施一个Spliterator.在Spliterator将实现逻辑如何和元件,以提供为下一个(tryAdvance).但也有其他两个非默认的方法trySplit和estimateSize()我将不得不执行.
JavaDoc Spliterator说:
用于遍历和分区源元素的对象.a覆盖的元素源
Spliterator可以是例如阵列,aCollection,IO通道或生成器函数....Spliterator除了顺序遍历之外,API还支持有效的并行遍历,支持分解以及单元素迭代....
另一方面,我可以实现逻辑如何前进到a周围的下一个元素Stream.Builder并绕过a Spliterator.在每次前进时我都会打电话accept或者add最后打电话build.所以它看起来很简单.
JavaDoc说什么?
一个可变的建设者
Stream.这允许Stream通过单独生成元素并将它们添加到Builder(无需使用ArrayList作为临时缓冲区的复制开销)来创建.
使用StreamSupport.stream我可以用a Spliterator来获取Stream.并且Builder还将提供一个Stream.
什么时候应该/我可以使用Stream.Builder?
只有当a Spliterator不会更高效时(例如因为无法对源进行分区并且无法估计其大小)?
我想使用 Java NIO 和 glob 在特定目录中搜索文件(不知道全名)。
public static void match(String glob, String location) throws IOException {
final PathMatcher pathMatcher = FileSystems.getDefault().getPathMatcher(
glob);
Files.walkFileTree(Paths.get(location), new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path path,
BasicFileAttributes attrs) throws IOException {
if (pathMatcher.matches(path)) {
System.out.println(path);
}
return FileVisitResult.CONTINUE;
}
});
}
Run Code Online (Sandbox Code Playgroud)
阅读一些教程我这样做了。如果我找到(第一个)具有给定 glob 字符串的文件,我只想返回字符串。
if (pathMatcher.matches(path)) {
return path.toString();
}
Run Code Online (Sandbox Code Playgroud) 是否有可能以某种方式在运行时更改枚举?例如使用反射.问题不是要改变枚举常量的状态.它将要更改枚举的常量集或删除任何常量.
关于以下枚举,是否可以添加颜色WHITE或删除颜色RED或更改其顺序?
public enum Color {
RED, GREEN, BLUE;
}
Run Code Online (Sandbox Code Playgroud)
我为什么这么问?
我知道这个问题有点恶意.但即使是约书亚布洛赫在谈论(1)关于实施单身人士并推荐了枚举单身人士模式时也提到了" 巧妙制造的攻击 ".如果我们可以修改枚举,那么对这种模式的攻击是否可行?
我试图解决它并部分管理它.我将发布我的结果作为答案 - 遵循这个建议.
(1)请参阅在Java中实现单例模式的有效方法是什么?其中包含指向effective_java_reloaded.pdf的链接,第31页.
NotFoundException我有一个方法,如果我的对象 id 是 则抛出null。
public void removeStatementBundleService(String bundleId) throws NotFoundException {
Optional<StatementBundle> bundleOpt = statementBundleRepository.findById(bundleId);
if(bundleOpt.isPresent()) {
StatementBundle bundle = bundleOpt.get();
if(bundle.getStatements() != null && !bundle.getStatements().isEmpty()) {
for(Statement statement: bundle.getStatements()) {
statementRepository.delete(statement);
}
}
if(bundle.getFileId() != null) {
try {
fileService.delete(bundle.getFileId());
} catch (IOException e) {
e.printStackTrace();
}
}
statementBundleRepository.delete(bundle);
} else {
throw new NotFoundException("Statement bundle with id: " + bundleId + " is not found.");
}
}
Run Code Online (Sandbox Code Playgroud)
我发现由于java.util.Optional使用了该类,所以不需要这样做。在oracle文档中我发现get()使用了if并且没有值然后NoSuchElementException抛出。将错误消息添加到异常的最佳方法是什么?我试图Optional …
为什么我在这段代码中得到空指针异常?
BigDecimal test = null;
String data = "";
try {
System.out.println(test==null?"":test.toString());
data = test==null?"":test.toString();
System.out.println(data);
data = data + " " + test==null?"":test.toString(); // catching null pointer in this line
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud) 我有一个可选的.
Optional<AssetEvent> latestEvent = ...
Run Code Online (Sandbox Code Playgroud)
我想从事件内部添加一个字段到列表(如果存在).
latestEvent.map(event -> event.getTimestamp()).ifPresent(latestList::add);
Run Code Online (Sandbox Code Playgroud)
我的IDE(Intelij)向我展示了"Lambda可以替换为方法引用" event.getTimestamp()
重构为
latestEvent.map(this::getTimestamp).ifPresent(latestList::add);
Run Code Online (Sandbox Code Playgroud)
给我一个错误,因为this将在代码执行的内容中引用周围的Object.我如何在Optional中引用Object的方法latestEvent
所以我有这个枚举不能按我的预期工作,需要一些修改:
public enum MyEnum {
CODE000("text description comes here"),
private final String value;
private static final Map<String, MyEnum> LOOKUP = Maps.uniqueIndex(
Arrays.asList(MyEnum.values()),
MyEnum::getValue
);
MyEnum(final String value) {
this.value = value;
}
public String getValue() {
return value;
}
public static MyEnum fromStatus(String status) {
return LOOKUP.get(status);
}
}
Run Code Online (Sandbox Code Playgroud)
它现在的工作方式是:
MyEnum.fromStatus("text description comes here") 当然,我想要反过来:
MyEnum.fromStatus("CODE000") 归还我 "text description comes here"
有人可以建议我如何改变这个吗?
有没有更好的方法在JAVA 8中编码?
if (info1 != null && info1.getId() != null && info1.getPartyNumber()!= null) {
billing.setSenderId(info1.getId());
billing.setSenderNumber(info1.getPartyNumber());
}
if (info2 != null && info2.getId() != null && info2.getPartyNumber()!= null) {
billing.setReceiverId(info2.getId());
billing.setSellerNumber(info2.getPartyNumber());
}
..
..
Run Code Online (Sandbox Code Playgroud)
提前致谢.注意:我调查Optional.ofNullable()但不确定这是否真的有助于多次检查?
尝试通过删除Int数组中的前导零来合并数字.
int[] array = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 5 };
for (int i = 0; i < arr.length; i++) {
String.format("%09d", array[i]);
}
for (int i = 0; i < arr.length; i++) {
System.out.print(array[i]);
}
Run Code Online (Sandbox Code Playgroud)
期望的输出:
405
Run Code Online (Sandbox Code Playgroud) java ×10
java-8 ×3
enums ×2
optional ×2
arrays ×1
bigdecimal ×1
builder ×1
conditional ×1
file ×1
glob ×1
int ×1
java-stream ×1
methods ×1
mockito ×1
nio ×1
null ×1
option-type ×1
reference ×1
reflection ×1
singleton ×1
spliterator ×1
spring-test ×1
testing ×1