在Java中是否可以创建类似于此execute方法的方法:
public void execute(Runnable... mrs) {
for (Runnable mr : mrs) {
mr.run();
// should print some expected string here
}
}
public void sleep(int seconds) {
try {
Thread.sleep(1000 * seconds);
} catch (InterruptedException ex) {
log.error("Error occured", ex);
}
}
public void customExecute() {
execute(() -> sleep(1), () -> sleep(2));
}
Run Code Online (Sandbox Code Playgroud)
但在执行每个操作后,它应该打印传递的String参数和(问题的关键时刻)它应该支持一行使用 - 类似于:
execute(("Action 1 passed") -> someAction(), ("Other action passed") -> otherAction());
Run Code Online (Sandbox Code Playgroud) 我有以下数组
ArrayList<Car> list = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
我想迭代它并抛出异常,如果它包含一定的值
即
如果至少有一个
list.stream.filter(x -> x.color.equals("Black"));
Run Code Online (Sandbox Code Playgroud)
然后我想停止迭代并抛出异常.
有办法吗?
可以说我有一个房间列表
List<Room> rooms;
Run Code Online (Sandbox Code Playgroud)
每个房间都有人员名单.
使用java8流我想迭代房间列表,获取所有人,在每个节点上执行一些方法(doSomething())并获得所有过滤对象的列表.
这是使用java 8的最佳实践吗?
List<Asset> pesonsList= new ArrayList<>();
for (Room room : rooms)
room.getPersonsList().stream()
.filter(person -> person.isTall())
.forEach(person -> {
doSomething(person);
pesonsList.add(person);
});
Run Code Online (Sandbox Code Playgroud) 我正在使用Java 8 Streams从csv文件创建流.我正在使用BufferedReader.lines(),我阅读了以下文档BufferedReader.lines():
在执行终端流操作之后,不能保证读取器将处于从中读取下一个字符或行的特定位置.
public class Streamy {
public static void main(String args[]) {
Reader reader = null;
BufferedReader breader = null;
try {
reader = new FileReader("refined.csv");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
breader = new BufferedReader(reader);
long l1 = breader.lines().count();
System.out.println("Line Count " + l1); // this works correctly
long l2 = breader.lines().count();
System.out.println("Line Count " + l2); // this gives 0
}
}
Run Code Online (Sandbox Code Playgroud)
它看起来像是第一次读取文件后,读者无法进入文件的开头.解决这个问题的方法是什么?
我有一个String title和一个List<String> bannedSubstrings.现在我想执行一行检查是否title没有bannedSubstrings.
我的方法:
if(bannedSubstrings.stream().filter(bannedSubstring -> title.contains(bannedSubstring)).isEmpty()){
...
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,没有isEmpty()流的方法.那你怎么解决这个问题呢?有一线解决方案吗?
我想在Bluemix独立的java应用程序中使用Java 8功能,这是默认支持还是我需要改变一些配置?
我已经制作了一个类似telnet的小应用程序,目前我知道两个套接字无法通信的唯一方法是在SocketException抛出"连接重置"消息时(当我轮询输入时).然而,它在我的应用程序中不会产生问题,因为我可以捕获异常,但有没有办法让我测试连接是否在我轮询输入之前已经重置,或者是唯一的方法是捕获异常?方法必须是Java API的一部分(没有3.方).
没有Socket类的方法似乎能够回答这个问题,而且我无法在网上找到任何东西.
是否可以jackson-datatype-jdk8在Restlet org.restlet.ext.jackson扩展包中注册该模块?我需要利用这个新Optional功能.我的猜测是它应该可以通过转换器服务(getConverterService())来访问,但是我在文档中找不到任何可以确定如何设置模块的内容.
我正在尝试用方法引用来压缩我的代码.这是我要改进的一条线:
assertThat("only true & false strings allowed",
records.stream().map(Record::getType)
.allMatch(s -> "true".equals(s) || "false".equals(s)));
Run Code Online (Sandbox Code Playgroud)
使用方法参考,它可以更好:
assertThat("only true & false strings allowed",
records.stream().map(Record::getType).allMatch("true"::equals));
Run Code Online (Sandbox Code Playgroud)
但是,无论如何我可以在谓词中添加"false"吗?
我有一个自己的类,MyDate并希望为Gson编写一个序列化器.此代码有效:
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(MyDate.class, new JsonSerializer<MyDate>() {
@Override
public JsonElement serialize(MyDate date, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(date.toString());
}
});
Run Code Online (Sandbox Code Playgroud)
但是,我想使用Java 8的强大功能,因此尝试过
builder.registerTypeAdapter(MyDate.class, (date, typeOfSrc, context) ->new JsonPrimitive(date.toString()));
Run Code Online (Sandbox Code Playgroud)
但是这里的日食告诉我
此表达式的目标类型必须是功能接口
Java 8代码有什么问题?