Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用方法引用将列表[索引]值添加到另一个列表。。?_Java_Java 8 - Fatal编程技术网

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));
    }
}