当前位置: 首页 > 知识库问答 >
问题:

Java 8流:在元素之后查找第一个元素

姜德容
2023-03-14

我有一个列表[z”,“1”,“3”,“x”,“y”,“00”,“x”,“y”,“4”],在这种情况下,我需要得到字符串00后的第一个整数元素。我正在使用Java 8流,但欢迎使用任何其他方法。这是我的启动码

myList.stream()
      // Remove any non-Integer characters
      .filter((str) -> !"x".equals(str) && !"y".equals(str) && !"z".equals(str))
      .findFirst()
      .orElse("");

这首先删除了所有非整数字符串,但给了我1。现在我需要的是获取4,这是00之后的第一个元素。我应该向过滤器添加什么?


共有3个答案

马弘益
2023-03-14

您可以尝试下面的代码。

import java.util.Arrays;
import java.util.List;
import java.util.Optional;

public class Main {

    public static void main(String[] args) {

        List<String> list = Arrays.asList("z", "1", "3", "x", "y", "00", "x", "y", "4");

        String str = "00";

        Optional<String> dataOptional = list.stream().skip(list.indexOf(str)+1).filter(s -> {
            try {
                Integer.parseInt(s);
                return true;
            } catch (NumberFormatException n) {
                return false;
            }
        }).findFirst();

        if (dataOptional.isPresent()) {
            System.out.println("Data is :: " + dataOptional.get());
        } else {
            System.out.println("No integer present after given string");
        }

    }
}

确保str在列表中,否则它将返回列表中的第一个整数。

姬翰林
2023-03-14

也许是一个简单的for循环。比流表达式更具可读性,也更通用,因为像“x”和“y”这样的字符串不会硬编码到其中。

boolean found00 = false;
int intAfter00 = -1;
for(String str: myList) {
    if("00".equals(str)) {
       found00 = true; //from this point we look for an integer
       continue;
    }
    if(found00) { //looking for an integer
       try {
           intAfter00 = Integer.parseInt(str);
       } catch(Exception e) {
          continue; //this was not an integer
       }
       break;
    }
}
//If intAfter00 is still -1 here then we did not found an integer after 00
夏烨霖
2023-03-14

从评论中获得。

 String result = myList.stream().skip(myList.indexOf("00") + 1)
        .filter((str) -> !"x".equals(str) && !"y".equals(str) && !"z".equals(str))
        .findFirst()
        .orElse("");
 类似资料:
  • 我试图列出整数列表中的重复元素,例如, 使用jdk 8的流。有人试过吗?要删除重复项,我们可以使用distinct() api。但是如何找到重复的元素呢?有人能帮我吗?

  • 我有以下几门课: 我有一个物品清单。我想遍历列表并找到具有特定ID的实例。我试着通过溪流来做。

  • 额外的问题:我如何得到插值的结果,其中确切的时间戳的值是线性插值之间的两个周围的值?

  • 问题内容: 我对如何在Java中执行此操作有一般的想法,但是我正在学习Python,但不确定如何执行。 我需要实现一个函数,该函数返回一个包含列表中所有其他元素的列表,从第一个元素开始。 到目前为止,我不确定从这里开始该怎么做,因为我只是在学习Python中的for循环是如何不同的: 问题答案:

  • 我刚刚开始玩Java 8 lambda,我正在尝试实现一些我在函数式语言中习惯的东西。 例如,大多数函数语言都有某种对序列进行操作的find函数,或返回第一个元素的列表,该元素的谓词为。我能看到的在《Java八号》中实现这一点的唯一方法是: 然而,这似乎没有效率,因为过滤器将扫描整个列表,至少在我的理解(这可能是错误的)。有更好的办法吗?

  • 问题内容: 我在页面上有以下HTML代码: 在我中,我有以下选择器来设置元素的样式。上面的HTML代码只是整个代码的一小部分;有更多的包裹属于一个shadowbox: 因此,我的元素样式正确,但是我也想在HTML中设置标签样式。 CSS选择器可能吗?如果是的话,我该怎么做? 问题答案: 这称为相邻的兄弟选择器。