Arraylist.forEach() 和 Arraylist.replaceAll() 之间的区别
Difference between Arraylist.forEach() and Arraylist.replaceAll()
我有一个关于 Arraylist.forEach()
和 Arraylist.replaceAll()
之间的区别的问题。我知道 Arraylist.forEach()
用于对列表中的每个元素执行一个操作,但似乎 Arraylist.replaceAll()
做完全相同的事情。但出于某种原因,当您决定执行 a.forEach(e -> e.concat("test");
假设 a 是一个字符串数组列表时,Arraylist 不会将“test”连接到 Arraylist 中每个字符串的末尾。但是,如果您执行 a.replaceAll(e -> e.concat("test");
,则连接有效。为什么会这样?我正在谈论的一个例子是这张图片:
.
答案是 B,但 C 对我来说似乎最有意义。感谢您的帮助。
concat
returns a new string, but forEach
忽略 lambda 表达式的 return 值。 (它声明的参数是一个 Consumer
,没有 return 值。)
replaceAll
将其函数中的 return 值放回列表中。这就是它的用途。
请记住,字符串是不可变的。当您调用 forEach()
时,您没有将 concat
的 return 值分配给任何东西,但是 replaceAll()
会这样做,因为它每次都会覆盖当前元素。
.forEach()
获取列表中的每个单独元素,然后应用该函数。通常你会调用一个对象的函数。在这种情况下,您将 returned 值丢弃并且不会更改对象。
.replaceAll()
获取列表中的每个单独元素并应用一个函数。之后 returned 值将设置在特定位置。
由于字符串不变性,.concat()
不会更改字符串引用,但它会 return 新引用中更改的字符串。
名称准确地解释了方法的作用。
forEach 将每个元素传递给函数,但只要对象是不可变类型,它就不会修改数组成员。因此,它不需要函数的 return 值(无效)。数组始终保持不变。字符串类型是不可变的,因此任何更改都不会影响数组中保存的对象。
replaceAll 将所有数组成员传递给函数并通过该函数检查对象return,当然将该对象存储回数组,即替换。请注意,在此方法中,函数必须 return 一个对象。在 String.concat 的情况下,连接的字符串被 returned 因此连接的字符串出现在数组中。
我认为这是因为
- a.forEach 遍历 arrayList 中的每个元素,然后连接 returns 一个新字符串。它不会更改 arrayList 中的原始字符串。
- a.Replaceall 将替换 arrayList 中的原始字符串。
我有一个关于 Arraylist.forEach()
和 Arraylist.replaceAll()
之间的区别的问题。我知道 Arraylist.forEach()
用于对列表中的每个元素执行一个操作,但似乎 Arraylist.replaceAll()
做完全相同的事情。但出于某种原因,当您决定执行 a.forEach(e -> e.concat("test");
假设 a 是一个字符串数组列表时,Arraylist 不会将“test”连接到 Arraylist 中每个字符串的末尾。但是,如果您执行 a.replaceAll(e -> e.concat("test");
,则连接有效。为什么会这样?我正在谈论的一个例子是这张图片:
答案是 B,但 C 对我来说似乎最有意义。感谢您的帮助。
concat
returns a new string, but forEach
忽略 lambda 表达式的 return 值。 (它声明的参数是一个 Consumer
,没有 return 值。)
replaceAll
将其函数中的 return 值放回列表中。这就是它的用途。
请记住,字符串是不可变的。当您调用 forEach()
时,您没有将 concat
的 return 值分配给任何东西,但是 replaceAll()
会这样做,因为它每次都会覆盖当前元素。
.forEach()
获取列表中的每个单独元素,然后应用该函数。通常你会调用一个对象的函数。在这种情况下,您将 returned 值丢弃并且不会更改对象。
.replaceAll()
获取列表中的每个单独元素并应用一个函数。之后 returned 值将设置在特定位置。
.concat()
不会更改字符串引用,但它会 return 新引用中更改的字符串。
名称准确地解释了方法的作用。
forEach 将每个元素传递给函数,但只要对象是不可变类型,它就不会修改数组成员。因此,它不需要函数的 return 值(无效)。数组始终保持不变。字符串类型是不可变的,因此任何更改都不会影响数组中保存的对象。
replaceAll 将所有数组成员传递给函数并通过该函数检查对象return,当然将该对象存储回数组,即替换。请注意,在此方法中,函数必须 return 一个对象。在 String.concat 的情况下,连接的字符串被 returned 因此连接的字符串出现在数组中。
我认为这是因为
- a.forEach 遍历 arrayList 中的每个元素,然后连接 returns 一个新字符串。它不会更改 arrayList 中的原始字符串。
- a.Replaceall 将替换 arrayList 中的原始字符串。