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

通过谓词对集合进行分区的库方法

朱通
2023-03-14
问题内容

我有一个对象集合,我想将其划分为两个集合,其中一个通过谓词,而其中一个失败谓词。我希望有一个Guava方法可以做到这一点,但是最接近的是filter,它没有给我其他的集合。

我会想像一下方法的签名,就像这样:

public static <E> Pair<Collection<E>, Collection<E>> partition(Collection<E> source, Predicate<? super E> predicate)

我意识到这对自己进行编码非常快,但是我正在寻找一种可以满足我需要的现有库方法。


问题答案:

使用番石榴的Multimaps.index

这是一个示例,该示例将单词列表分为两部分:长度大于3的单词和不大于3的单词。

List<String> words = Arrays.asList("foo", "bar", "hello", "world");

ImmutableListMultimap<Boolean, String> partitionedMap = Multimaps.index(words, new Function<String, Boolean>(){
    @Override
    public Boolean apply(String input) {
        return input.length() > 3;
    }
});
System.out.println(partitionedMap);

印刷品:

false=[foo, bar], true=[hello, world]


 类似资料:
  • 问题内容: 我有一个清单,我想分成几个小清单。 说出所有包含“ aaa”的项目,所有包含“ bbb”的项目以及更多谓词。 我该如何使用java8? 我看到了这篇文章,但只拆分为2个列表。 我看到了这篇文章,但是在Java 8之前已经很老了。 问题答案: 就@RealSkeptic中解释的那样,注释只能返回两个结果:true和false。这意味着您将只能将数据分为两组。 您需要的是某种可以让您确定应

  • 问题内容: 是否存在Java 8流操作来限制(可能是无限的)Stream直到第一个元素与谓词不匹配? 在Java 9中,我们可以takeWhile像下面的示例那样使用它来打印所有小于10的数字。 由于Java 8中没有这样的操作,以一般方式实现它的最佳方法是什么? 问题答案: 这样的操作在Java 8中应该是可能的,但不一定能有效地完成-例如,您不必并行化这样的操作,因为您必须按顺序查看元素。 该

  • 我有一种情况,我想根据强加给其特定类型的谓词集合来过滤对象:这可以通过预编译的来完成吗? 我说上面的,因为我希望我的谓词基于该特定类型...

  • 问题内容: 我想做类似的事情: Python的标准库中是否有类似行为? 我知道在这里自己动手很容易,但是我正在寻找一种更标准的方法。 问题答案: 您可以使用filter方法: 或列表理解: 要查找单个元素,可以尝试: 尽管如果没有匹配项将引发异常,因此您可能希望将其包装在try / catch中。方括号()使之成为生成器表达式,而不是列表理解。 就我个人而言,尽管我只是使用常规的过滤器/理解并采用