Java Arraylist.forEach()和Arraylist.replaceAll()之间的差异

Java Arraylist.forEach()和Arraylist.replaceAll()之间的差异,java,arraylist,foreach,replaceall,Java,Arraylist,Foreach,Replaceall,我有一个关于Arraylist.forEach()和Arraylist.replaceAll()之间的区别的问题。我知道Arraylist.forEach()用于对列表中的每个元素执行操作,但似乎Arraylist.replaceAll()做了完全相同的事情。但是由于某种原因,当您决定执行a.forEach(e->e.concat(“test”);假设a是字符串的Arraylist时,Arraylist不会将“test”连接到Arraylist中每个字符串的末尾。但是,如果执行a.replace

我有一个关于
Arraylist.forEach()
Arraylist.replaceAll()
之间的区别的问题。我知道
Arraylist.forEach()
用于对列表中的每个元素执行操作,但似乎
Arraylist.replaceAll()
做了完全相同的事情。但是由于某种原因,当您决定执行
a.forEach(e->e.concat(“test”);
假设a是字符串的Arraylist时,Arraylist不会将“test”连接到Arraylist中每个字符串的末尾。但是,如果执行
a.replaceAll(e->e.concat(“test”)操作
,串联起作用。为什么会是这种情况?我所说的一个例子在这幅图中:

答案是B,但C对我来说似乎最有意义。感谢您的帮助。

返回一个新字符串,但忽略lambda表达式的返回值。(其声明的参数是a
Consumer
,它没有返回值。)

将其函数的返回值放回列表中。这就是它的用途。

返回一个新字符串,但忽略lambda表达式的返回值。(其声明的参数是一个
使用者,它没有返回值。)


将其函数的返回值放回列表中。这就是它的用途。

请记住字符串是不可变的。调用
forEach()
时,您没有将
concat
的返回值赋给任何对象,而是将
replaceAll()赋值
不会,因为它每次都覆盖当前元素。

请记住字符串是不可变的。调用
forEach()
时,您不会将
concat
的返回值赋给任何对象,但是
replaceAll()
会,因为它每次都覆盖当前元素。

.forEach()
获取列表中的每个元素,然后应用函数。通常,您会调用对象的函数。在这种情况下,您会丢弃返回值,而不会更改对象

.replaceAll()
获取列表中的每个元素并应用一个函数。之后,返回值将在特定位置设置

.concat()
由于字符串不可变,不会更改字符串引用,但它将在新引用中返回更改后的字符串。

.forEach()
获取列表中的每个元素,然后应用函数。通常,您会调用对象的函数。在这种情况下,您会丢弃返回值,而不会更改对象

.replaceAll()
获取列表中的每个元素并应用一个函数。之后,返回值将在特定位置设置


.concat()
由于字符串不可变,不会更改字符串引用,但它将在新引用中返回更改后的字符串。

名称准确解释了方法的作用

forEach将每个元素传递给函数,但只要对象是不可变类型,它就不会修改数组成员。因此,它不希望函数返回值(void)。数组始终保持不变。字符串类型是不可变的,因此任何更改都不会影响数组中保存的对象


replaceAll将所有数组成员传递给函数,并检查该函数返回的对象,当然还将该对象存储回数组,这意味着替换。请注意,在该方法中,函数必须返回一个对象。对于String.concat,将返回连接的字符串,从而连接的字符串显示在数组中。

T他准确地解释了这些方法的作用

forEach将每个元素传递给函数,但只要对象是不可变类型,它就不会修改数组成员。因此,它不希望函数返回值(void)。数组始终保持不变。字符串类型是不可变的,因此任何更改都不会影响数组中保存的对象


replaceAll将所有数组成员传递给函数,并检查该函数返回的对象,当然还将该对象存储回数组,这意味着替换。请注意,在该方法中,函数必须返回一个对象。对于String.concat,将返回连接的字符串,从而连接的字符串显示在数组中。

I我想这是因为

  • a、 forEach迭代arrayList中的每个元素,然后Concat返回一个新字符串。它不会更改arrayList中的原始字符串
  • a、 Replaceall将替换arrayList中的原始字符串

  • 我想这是因为

  • a、 forEach迭代arrayList中的每个元素,然后Concat返回一个新字符串。它不会更改arrayList中的原始字符串
  • a、 Replaceall将替换arrayList中的原始字符串

  • concat
    返回一个新字符串,但
    forEach
    忽略lambda表达式的返回值。
    replaceAll
    不忽略lambda表达式的返回值。
    concat
    返回一个新字符串,但
    forEach
    忽略lambda表达式的返回值。
    replaceAll
    不忽略lambda表达式的返回值。
    replaceAll
    这很有意义。谢谢!啊,这让我很高兴谢谢!