gpt4 book ai didi

java - 从 Java 列表中获取满足流条件的第 n 个元素的子列表

转载 作者:行者123 更新时间:2023-11-30 03:17:05 24 4
gpt4 key购买 nike

我有一个非常简单的用例

给定一个包含 A 和 B 的字母列表,我想获取包含前 N 个 B 的子列表,例如:

  • f(3, [A A A B A B A B A A]) = [A A A B A B A B]
  • f(2, [A A A B A B A B A A]) = [A A A B A B]
  • f(1, [A A B A B A]) = [A A B]
  • f(0, [A A B A B]) = []

通过遵循命令式方法,这相对容易,计数直到找到 N 个 B,然后获取子列表直到该位置。

但是,我找不到任何带有 lambda 的功能解决方案,因为每个节点上的操作似乎都独立于其他节点(我认为这对于并行化是有意义的)。

最佳答案

如果您的输入是具有快速随机访问的List,您可以使用索引流解决您的问题:

public static List<String> f(int n, List<String> input) {
int fence = IntStream.range(0, input.size())
.filter(idx -> input.get(idx).equals("B")) // leave only B's
.skip(n-1)
.findFirst() // an index of n-th B
.getAsInt(); // with throw NoSuchElementException if not enough B's
return input.subList(0, fence+1);
}

使用示例:

System.out.println(f(3, Arrays.asList("A", "A", "A", "B", "A", "B", "A", "B", "A", "A")));
System.out.println(f(2, Arrays.asList("A", "A", "A", "B", "A", "B", "A", "B", "A", "A")));
System.out.println(f(1, Arrays.asList("A", "A", "A", "B", "A", "B", "A", "B", "A", "A")));

尽管我喜欢 Stream API,但我还是会迫切地解决这个问题。

关于java - 从 Java 列表中获取满足流条件的第 n 个元素的子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32309863/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com