小编Tag*_*eev的帖子

使用流生成地图时忽略重复项

Map<String, String> phoneBook=people.stream()
                                    .collect(toMap(Person::getName, Person::getAddress));
Run Code Online (Sandbox Code Playgroud)

重复发生时,我得到重复的密钥异常.

是否可以忽略在重复发生时将值添加到映射?

当存在重复时,它应该继续忽略该重复键.

java java-8 java-stream

226
推荐指数
3
解决办法
10万
查看次数

仅当在Java8中使用lambda时不为null时才过滤值

我有一个对象列表说car.我想基于使用Java 8的一些参数来过滤此列表.但是如果参数是null,它会抛出NullPointerException.如何过滤掉空值?

目前的代码如下

requiredCars = cars.stream().filter(c -> c.getName().startsWith("M"));
Run Code Online (Sandbox Code Playgroud)

NullPointerException如果getName()返回则抛出null.

java null lambda nullpointerexception java-8

146
推荐指数
5
解决办法
18万
查看次数

Java 8流和RxJava可观察量之间的差异

Java 8流是否类似于RxJava observables?

Java 8流定义:

java.util.stream包中的类提供Stream API以支持对元素流的功能样式操作.

observable java-8 rx-java java-stream

137
推荐指数
5
解决办法
4万
查看次数

'instanceof'运算符对接口和类的行为有所不同

我想知道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 inheritance interface class instanceof

88
推荐指数
1
解决办法
3538
查看次数

Java 8 Streams FlatMap方法示例

我一直在检查即将到来的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.

java java-8 java-stream flatmap

84
推荐指数
4
解决办法
11万
查看次数

为什么我不能在从数组流式传输时将整数映射到字符串?

此代码有效(在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表达式中有一个"不兼容的返回类型字符串".

为什么?以及如何解决这个问题?

java functional-programming java-8 java-stream

84
推荐指数
3
解决办法
4万
查看次数

如何在java 8中使用流从Integer中找到最大值?

我有一个列表,Integer listlist.stream()我想要的最大值.什么是最简单的方法?我需要比较器吗?

java-8 java-stream

83
推荐指数
2
解决办法
7万
查看次数

带有批处理的Java 8 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 batch-processing java-8 java-stream

80
推荐指数
8
解决办法
4万
查看次数

正确使用Optional.ifPresent()

我试图理解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支票.

有任何想法吗?

java lambda optional java-8

78
推荐指数
5
解决办法
14万
查看次数

forEach循环Java 8 for Map条目集

我正在尝试将每个循环的旧常规转换为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 lambda java-8

72
推荐指数
3
解决办法
17万
查看次数