当前位置: 首页 > 面试题库 >

任何不丢弃的类似于滤波器的lambda操作?

慕容齐智
2023-03-14
问题内容

我基本上想做类似的事情:

  assertEquals(Arrays.asList(1,2,3).stream()
                                   .noDiscardingFilter(x -> x!=1)
                                   .map(x -> x*10)
                                   .collect(Collectors.toList()),  
                Arrays.asList(1,20,30)
              )

这是一个示例,我不需要获取有关如何解决该特定问题的答案,它只是一个示例,它说明了我所追求的东西。


问题答案:

任何中间步骤都会影响整个流管道。您的愿望背后没有可识别的规则,即该noDiscardingFilter步骤会影响随后链接的map操作,但不会影响collect操作。如果要具有条件函数,则将其实现为这样会更加清晰:

public static <T> Function<T,T> conditional(
                                Predicate<? super T> p, Function<T, ? extends T> f) {
    return obj -> p.test(obj)? f.apply(obj): obj;
}

这可以用作

assertEquals(Stream.of(1, 2, 3)
        .map(conditional(x -> x!=1, x -> x*10))
        .collect(Collectors.toList()),
    Arrays.asList(1, 20, 30)
);

要么

Stream.of(1, 5, null, 3, null, 4)
      .map(conditional(Objects::isNull, x -> 0)) // replacing null with default value
      .forEach(System.out::println);

要么

Stream.of(1, 5, null, 3, null, 4)
      .map(conditional(Objects::nonNull, x -> x*10)) // null-safe calculation
      .forEach(System.out::println);

请注意,在这些用例中,如何立即识别出传递给的谓词和函数conditional属于同一作用域,这与链式流操作不同。



 类似资料:
  • 这既难看又冗长,所以问题是,我在这里做错了什么,我应该如何以更好、更干净、更优雅的解决方案来做? 干杯。

  • 我有个案子需要 对象,如果映射函数抛出异常,我将其映射为。 对象的映射流,如果为null,则抛出异常,否则收集到列表。 我该如何做到这一点呢? 现在我的问题是,我应该如何调整/重构上面的lambda以使on或其他。

  • 作为参考,我使用的是Elasticsearch 6.4.0 我有一个Elasticsearch查询,它返回一定的命中视频数,我正在尝试删除文本字段值过于相似的命中。我的查询是: 此查询使用自定义函数分数和筛选器来返回用户可能喜欢的书籍(他们尚未创作的书籍)。对于某些人来说,它返回的名字非常相似的书(即乔治·华盛顿的一生,乔治·华盛顿的美好时光,谁是乔治·华盛顿),我希望热门歌曲有一套更多样化的名字

  • 本文向大家介绍Python图像滤波处理操作示例【基于ImageFilter类】,包括了Python图像滤波处理操作示例【基于ImageFilter类】的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python图像滤波处理操作。分享给大家供大家参考,具体如下: 在图像处理中,经常需要对图像进行平滑、锐化、边界增强等滤波处理。在使用PIL图像处理库时,我们通过Image类中的成员函数filt

  • 这个问题只是为了让我理解这个概念。空值怎么能转换成(可丢弃的)?null不是一个类,对吗?这个问题可能很愚蠢。 我知道:

  • 除了前一节介绍的权重衰减以外,深度学习模型常常使用丢弃法(dropout)[1] 来应对过拟合问题。丢弃法有一些不同的变体。本节中提到的丢弃法特指倒置丢弃法(inverted dropout)。 方法 回忆一下,“多层感知机”一节的图3.3描述了一个单隐藏层的多层感知机。其中输入个数为4,隐藏单元个数为5,且隐藏单元$h_i$($i=1, \ldots, 5$)的计算表达式为 $$h_i = \p