Java 如何使用方法引用将列表[索引]值添加到另一个列表。。?
这是我的Java 如何使用方法引用将列表[索引]值添加到另一个列表。。?,java,java-8,Java,Java 8,这是我的列表值[a,b,c,d],我试图将列表[1]索引值b添加到另一个列表中。。如果我使用lambda!我能够做到这一点,有没有任何方法或途径可以用方法参考来实现同样的事情?。 下面是我试过的代码 List<String> list1 = new ArrayList<>(); //list1 values are like [a,b,c,d] List<String> list2 = new ArrayList<>(); list1.forEac
列表值[a,b,c,d]
,我试图将列表[1]索引值b
添加到另一个列表中。。如果我使用lambda!我能够做到这一点,有没有任何方法或途径可以用方法参考来实现同样的事情?。
下面是我试过的代码
List<String> list1 = new ArrayList<>();
//list1 values are like [a,b,c,d]
List<String> list2 = new ArrayList<>();
list1.forEach(x-> {
list2.add(x.get(1));
});
indexOf()
将返回对象第一次出现的索引
List<Integer> list2 = new ArrayList<>();
list2.add(list1.indexOf("b"));
List list2=new ArrayList();
列表2.添加(列表1.索引(“b”));
list1.forEach(x->{})
的工作原理如下:对列表中的每个x
执行{}
之间的操作。这意味着x已经是一个元素,x.get(1)
将不会提供预期的结果
一种解决方案可以简单地使用:list2.add(list1.get(1))代码>
如果您确实想使用方法引用和lambda,那么可以使用BiConsumer
功能接口。以下是一个例子:
BiConsumer<List<String>, String> addConsumer = List::add;
List<String> list1 = new ArrayList<>(); //values [a,b,c,d]
List<String> list2 = new ArrayList<>();
addConsumer.accept(list2, list1.get(1));
BiConsumer addConsumer=List::add;
List list1=新的ArrayList()//数值[a、b、c、d]
List list2=新的ArrayList();
addConsumer.accept(list2,list1.get(1));
因此,如果您考虑实际的lambda,它是一个消费者
,这意味着它可以被任何类型为T并返回void的方法引用。所以在这个例子中,因为您正在寻找一个使用我给出的方法引用的东西。这并不漂亮,但我想让你明白一点,List.forEach((t)->{})
就是List.forEach(Consumer)| List.forEach()
下面是一个简单的例子
package org.stackoverflow.thread_safe_account;
import java.util.ArrayList;
import java.util.List;
public class Main {
private static List<String> knownList = new ArrayList<>();
public static void main(String[] args) {
//list1 values are like [a,b,c,d]
List<String> createdList = new ArrayList<>();
createdList.add("this");
createdList.add("is");
createdList.add("zoo");
createdList.add("stackoverflow");
createdList.forEach(Main::itemConsumer);
if (!knownList.get(0).equals("t")) {
throw new RuntimeException("failed");
}
if (!knownList.get(1).equals("i")) {
throw new RuntimeException("failed");
}
if (!knownList.get(2).equals("z")) {
throw new RuntimeException("failed");
}
if (!knownList.get(3).equals("s")) {
throw new RuntimeException("failed");
}
}
public static void itemConsumer(String item) {
if (item.length() < 1) knownList.add("");
else knownList.add(item.substring(0, 1));
}
}
package org.stackoverflow.thread\u safe\u账户;
导入java.util.ArrayList;
导入java.util.List;
公共班机{
私有静态列表knownList=newarraylist();
公共静态void main(字符串[]args){
//列表1的值类似于[a、b、c、d]
List createdList=new ArrayList();
createdList.add(“此”);
createdList.add(“is”);
createdList.add(“zoo”);
添加(“堆栈溢出”);
createdList.forEach(Main::itemConsumer);
如果(!knownList.get(0).equals(“t”)){
抛出新的运行时异常(“失败”);
}
如果(!knownList.get(1).equals(“i”)){
抛出新的运行时异常(“失败”);
}
如果(!knownList.get(2).equals(“z”)){
抛出新的运行时异常(“失败”);
}
如果(!knownList.get(3).equals(“s”)){
抛出新的运行时异常(“失败”);
}
}
公共静态无效项使用者(字符串项){
如果(item.length()<1)knownList.add(“”);
else knownList.add(item.substring(0,1));
}
}
x.get(1)
中的值1是否总是相同的?因为如果它是一个变量,您将需要在take参数返回值中使用函数
,但如果它是一个常量,您可以在返回值中使用供应商
。@SamOrozco否。。。当数据流动时,值是不同的,但我需要取第一个索引值。您是否试图将1
或“b”
添加到list2
?那么您是否正在查找此项<代码>list1.forEach(list2::add)代码>我不明白的是String.get()不是一个实际的方法。所以你只需要字符串中的第一个字符。哦。。。!!我需要使用类似于以下内容的方法引用来实现此目标。list1.forEach(list2::add)
@itispa1您能解释一下原因吗?@Guy我正要问同样的问题。它按照我的预期工作。。我需要使用方法引用实现同样的目标:`:`@itispa1我已经修改了我的答案。嘿,很好,但我需要避免一大堆行。。!!实际操作只有两条线。另外两个是列表。“…并返回void…”-好吧,该方法不必返回void。如果该方法返回任何内容,它将被丢弃。
package org.stackoverflow.thread_safe_account;
import java.util.ArrayList;
import java.util.List;
public class Main {
private static List<String> knownList = new ArrayList<>();
public static void main(String[] args) {
//list1 values are like [a,b,c,d]
List<String> createdList = new ArrayList<>();
createdList.add("this");
createdList.add("is");
createdList.add("zoo");
createdList.add("stackoverflow");
createdList.forEach(Main::itemConsumer);
if (!knownList.get(0).equals("t")) {
throw new RuntimeException("failed");
}
if (!knownList.get(1).equals("i")) {
throw new RuntimeException("failed");
}
if (!knownList.get(2).equals("z")) {
throw new RuntimeException("failed");
}
if (!knownList.get(3).equals("s")) {
throw new RuntimeException("failed");
}
}
public static void itemConsumer(String item) {
if (item.length() < 1) knownList.add("");
else knownList.add(item.substring(0, 1));
}
}