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

如何在Java中使用stream对一个列表中的两个相邻元素进行比较和操作?

微生良策
2023-03-14

背景是我有两个字符串类型变量str1和str2作为输入。最后,我必须返回一个列表,其中包含str1的连续前缀,该前缀小于Str2中的相关前缀。

public List<Character> getPrefix(String str1, String str2) {
    int index = 0;
    List<Character> res = new ArrayList<>();
    //str1 = "1243"
    //str2 = "2324"
    // The answer will be "12".

    while (index < str1.length() && index < str2.length() && str1.charAt(index) <= str2.charAt(index)) {
        res.add(str1.charAt(index));
        index++;
    } 

    return res;
}
//the return type could either be List<String> or List<Character>
List<String> list = new ArrayList<>();
list.add(str1);
list.add(str2);
List<String> res = list.stream()
.filter()
.reduce();

但我发现我既无法操作一个列表中的两个相邻元素,也无法获得一个指针来比较和遍历列表中每个元素(元素是字符串类型)中的每个字符。

那么有没有什么方法可以操作一个列表中的两个相邻元素,这样我就可以比较它们在相同位置的字符。

共有1个答案

宦飞
2023-03-14

您可以:

>

  • 生成索引流
  • 使用索引获取两个字符串的字符
  • 选择有效字符

    // The magic
    public static List<Character> getPrefix(String str1, String str2) {
    
        return IntStream
            .range(0, Math.min(str1.length(), str2.length()))
            .mapToObj(i -> new char[] { str1.charAt(i), str2.charAt(i) })
            .takeWhile(a -> a[0] < a[1])
            .map(a -> a[0])
            .collect(Collectors.toList());
    
    }
    

  •  类似资料:
    • 我得到了两个字符串类型arraylist。一个列表包含“book1”、“book2”、“book3”和“book4”。另一个arrayList包含“book1”、“book2”、“book3”。因此,第一个列表的大小为4,第二个列表的大小为3。我创建了另一个与第一个列表大小相等的arrayList 但是当我这样做的时候,我不能设置1,因为我不能进入if状态,有人能帮我吗

    • 问题内容: 我得到了两个String类型的arraylist ..一个包含“ book1”,“ book2”,“ book3”和“ book4”的列表。另一个arrayList包含“ book1”,“ book2”,“ book3”。因此,第一个列表的大小为4,第二个列表的大小为3。我创建了另一个与第一个列表的大小相等的arrayList 如果两个列表之间的内容相等,那么我将设置为1而不是0。 所

    • 问题内容: 我有两个列表(不是Java列表,可以说两列) 例如 我想要一个返回多少个相同元素的方法。对于此示例,它应该为3,并且应该返回列表的相似值和不同的值。 如果是,我应该使用哈希图,然后用什么方法获得结果? 请帮忙 PS:这不是学校作业:)因此,如果您只是指导我就足够了 问题答案: 编辑 这是两个版本。一种使用,另一种使用 比较它们并从中创建您自己的版本,直到获得所需的内容。 这应该足以覆盖

    • 我正在研究基本的学生系统。学生有他的sudy字段。每个研究领域都分配了一些科目。每个学生都被分配了两个科目。现在我需要得到并打印所有分配到他的研究领域的其他科目,这些科目还没有分配给他。这是我尝试过的 它不起作用,因为我使用的第二个for循环将第一个列表的元素与第二个列表的每个元素进行比较,所以它添加了所有元素。即使是我不想要的。这很明显,因为第一个列表中的对象需要与第二个列表中的所有元素相同,才

    • 问题内容: 在java中如何比较两个对象是否相等?何时使用equals和hashcode? 问题答案: 理论(针对语言律师和数学倾向者): (javadoc)必须定义一个等价关系(它必须是自反的,对称的和可传递的)。另外,它必须是一致的(如果未修改对象,则它必须保持返回相同的值)。此外,必须始终返回false。 (javadoc)也必须是一致的(如果未根据修改对象equals(),则它必须保持返回

    • 根据逻辑,我需要实现两个,如果它们以相同的“相对”顺序具有相同的元素,则它们被认为是相等的。 举个例子,以下一对列表被认为彼此相等: 只要遵守相对顺序,就可以认为它们是平等的。 作为反例,这两个不相等: 导致 和 交换到位。 所以,基本上我发现这很有挑战性,因为这不是顺序完全重要的情况,也不是顺序完全不重要的情况。在这种情况下,我会使用普通的< code>list1.equals(list2)方法