Java 在流中处理null而不进行筛选

Java 在流中处理null而不进行筛选,java,java-8,java-stream,Java,Java 8,Java Stream,我想使用streams API迭代映射,但是,如果EntrySet的元素中出现任何null,我想做一些自定义处理 因为我需要自定义空值处理,所以我不能只使用Stream::filter 使用我的当前函数(MyClass::f) HashMap map=newhashmap(); map.entrySet().stream().map(MyClass::f); 我得到了一个NullPointerException映射,该映射带有一个函数,该函数处理null,并返回其他对象的原始值 没有具体的用例

我想使用streams API迭代
映射
,但是,如果
EntrySet
的元素中出现任何
null
,我想做一些自定义处理

因为我需要自定义空值处理,所以我不能只使用
Stream::filter

使用我的当前函数(
MyClass::f

HashMap map=newhashmap();
map.entrySet().stream().map(MyClass::f);

我得到了一个
NullPointerException
映射
,该映射带有一个函数,该函数处理
null
,并返回其他对象的原始值

没有具体的用例,这是我能提供的最好的:

List<String> s = Arrays.asList("foo", null, "bar", null);
s.stream()
  .map(e -> (e == null) ? "woops, something was null" : e)
  .forEach(System.out::println);

您可以将带有if语句或三元条件运算符的函数接口传递给希望将逻辑放入的任何流操作(
map
forEach
,…)。HashMap map=new HashMap();map.entrySet().stream().map(//lambda);这段代码将抛出NPE,我想处理null并避免npeth,这与
lambda
有关<代码>map.entrySet().stream().map(x->{return x;})可以很好地工作。@shmosel我正在考虑ConcurrentHashMap。NM-注释已删除。@midor,你是对的,这是lamdba。请你在这里提供一些代码,我对java8sure非常陌生,如果你提供一个示例,说明你想映射什么。map.entrySet().stream().map()这段代码给我NPE,所以基本上只要map.entrySet().stream()为空,然后打印错误,如果不为null,则调用map.entrySet().stream().map(lamdba)。如果没有
.map(e->(e==null)?“null”:e)
步骤,您的代码将执行完全相同的操作@ManasSaxena:if
HashMap map=newhashmap();map.entrySet().stream().map(lambda)
抛出NPE,
lambda
必须为
null
。毕竟,空映射中没有
null
s,并且没有终端操作的流甚至没有处理任何元素(如果有)。更新,以明确映射步骤表示对null值的特殊处理
List<String> s = Arrays.asList("foo", null, "bar", null);
s.stream()
  .map(e -> (e == null) ? "woops, something was null" : e)
  .forEach(System.out::println);
foo 
woops, something was null
bar
woops, something was null