Map<String, String> phoneBook=people.stream()
.collect(toMap(Person::getName, Person::getAddress));
Run Code Online (Sandbox Code Playgroud)
重复发生时,我得到重复的密钥异常.
是否可以忽略在重复发生时将值添加到映射?
当存在重复时,它应该继续忽略该重复键.
我有一个对象列表说car.我想基于使用Java 8的一些参数来过滤此列表.但是如果参数是null,它会抛出NullPointerException.如何过滤掉空值?
目前的代码如下
requiredCars = cars.stream().filter(c -> c.getName().startsWith("M"));
Run Code Online (Sandbox Code Playgroud)
NullPointerException如果getName()返回则抛出null.
Java 8流是否类似于RxJava observables?
Java 8流定义:
新
java.util.stream包中的类提供Stream API以支持对元素流的功能样式操作.
我想知道instanceofJava 中运算符的以下行为.
interface C {}
class B {}
public class A {
public static void main(String args[]) {
B obj = new B();
System.out.println(obj instanceof A); //Gives compiler error
System.out.println(obj instanceof C); //Gives false as output
}
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样?interface C和之间没有关系class B,但是它给出了假,而在obj instanceof A它出现编译错误的情况下?
我一直在检查即将到来的Java update,即:Java 8 or JDK 8.是的,我很不耐烦,有很多新东西,但是,有一些我不明白的东西,一些简单的代码:
final Stream<Integer>stream = Stream.of(1,2,3,4,5,6,7,8,9,10);
stream.flatMap();
Run Code Online (Sandbox Code Playgroud)
javadoc是
public <R> Stream<R> flatMap(Function<? super T,? extends Stream<? extends R>> mapper)返回一个流,该流包含将此流的每个元素替换为通过将提供的映射函数应用于每个元素而生成的映射流的内容的结果.每个映射的流在其内容放入此流后关闭.(如果映射的流为空,则使用空流.)这是一个中间操作.
如果有人创建了一些简单的现实生活示例flatMap,如何在以前的java版本Java[6,7]中编写代码以及如何使用相同的例程编写代码,我将不胜感激Java 8.
此代码有效(在Javadoc中使用):
List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
String commaSeparatedNumbers = numbers.stream()
.map(i -> i.toString())
.collect(Collectors.joining(", "));
Run Code Online (Sandbox Code Playgroud)
这个不能编译:
int[] numbers = {1, 2, 3, 4};
String commaSeparatedNumbers = Arrays.stream(numbers)
.map((Integer i) -> i.toString())
.collect(Collectors.joining(", "));
Run Code Online (Sandbox Code Playgroud)
IDEA告诉我,我在lambda表达式中有一个"不兼容的返回类型字符串".
为什么?以及如何解决这个问题?
我有一个列表,Integer list从list.stream()我想要的最大值.什么是最简单的方法?我需要比较器吗?
我有一个包含项目列表的大文件.
我想创建一批项目,使用此批处理发出HTTP请求(所有项目都需要作为HTTP请求中的参数).我可以通过for循环很容易地完成它,但作为Java 8的爱好者,我想尝试用Java 8的Stream框架编写它(并获得延迟处理的好处).
例:
List<String> batch = new ArrayList<>(BATCH_SIZE);
for (int i = 0; i < data.size(); i++) {
batch.add(data.get(i));
if (batch.size() == BATCH_SIZE) process(batch);
}
if (batch.size() > 0) process(batch);
Run Code Online (Sandbox Code Playgroud)
我想做一些很长的路要走
lazyFileStream.group(500).map(processBatch).collect(toList())
最好的方法是什么?
我试图理解Java 8中API 的ifPresent()方法Optional.
我有简单的逻辑:
Optional<User> user=...
user.ifPresent(doSomethingWithUser(user.get()));
Run Code Online (Sandbox Code Playgroud)
但这会导致编译错误:
ifPresent(java.util.functionError:(186, 74) java: 'void' type not allowed here)
Run Code Online (Sandbox Code Playgroud)
我当然可以这样做:
if(user.isPresent())
{
doSomethingWithUser(user.get());
}
Run Code Online (Sandbox Code Playgroud)
但这就像一张杂乱无章的null支票.
如果我将代码更改为:
user.ifPresent(new Consumer<User>() {
@Override public void accept(User user) {
doSomethingWithUser(user.get());
}
});
Run Code Online (Sandbox Code Playgroud)
代码变得越来越脏,这让我想到回到旧的null支票.
有任何想法吗?
我正在尝试将每个循环的旧常规转换为java7到java8的每个循环用于映射条目集但是我收到错误.这是我要转换的代码:
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("Key : " + entry.getKey() + " Value : " + entry.getValue());
}
Run Code Online (Sandbox Code Playgroud)
这是我所做的改变:
map.forEach( Map.Entry<String, String> entry -> {
System.out.println("Key : " + entry.getKey() + " Value : " + entry.getValue());
});
Run Code Online (Sandbox Code Playgroud)
我也尝试过这样做:
Map.Entry<String, String> entry;
map.forEach(entry -> {
System.out.println("Key : " + entry.getKey() + " Value : " + entry.getValue());
});
Run Code Online (Sandbox Code Playgroud)
但仍面临错误.我得到的错误是:Lambda表达式的签名与功能接口方法的签名不匹配accept(String, String)
java-8 ×9
java ×8
java-stream ×6
lambda ×3
class ×1
flatmap ×1
inheritance ×1
instanceof ×1
interface ×1
null ×1
observable ×1
optional ×1
rx-java ×1