Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.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
如何使用Java8流从对象列表中提取字符串值并创建新列表?_Java_Lambda - Fatal编程技术网

如何使用Java8流从对象列表中提取字符串值并创建新列表?

如何使用Java8流从对象列表中提取字符串值并创建新列表?,java,lambda,Java,Lambda,在看了各种各样的例子之后,我似乎无法理解这一点 以下是我现在正在做的: HashSet<String> oldIds = new HashSet<>(); HashSet<String> newIds = new HashSet<>(); for (Release currentRelease: lastPage.getPage()) { oldIds.add(currentRelease.getId()); } for (Relea

在看了各种各样的例子之后,我似乎无法理解这一点

以下是我现在正在做的:

HashSet<String> oldIds = new HashSet<>();
HashSet<String> newIds = new HashSet<>();

for (Release currentRelease: lastPage.getPage()) {
    oldIds.add(currentRelease.getId()); 
}

for (Release currentRelease: lastPageAgain) { 
    newIds.add(currentRelease.getId()); 
}

但不幸的是,这并不适用于我。

以下是对我有效的方法:

    HashSet<String> oldIds = new HashSet<>();
    HashSet<String> newIds = new HashSet<>();


    lastPage.getPage().getContent().forEach(r -> oldIds.add(r.getId())); // my first lambda :)
    lastPageAgain.forEach(r -> newIds.add(r.getId()));
HashSet oldIds=new HashSet();
HashSet newIds=新HashSet();
lastPage.getPage().getContent().forEach(r->oldIds.add(r.getId());//我的第一个lambda:)
forEach(r->newIds.add(r.getId());

语法略有不同,因为
lastPage
lastPage
实际上是不同的类型

以下是对我有效的方法:

    HashSet<String> oldIds = new HashSet<>();
    HashSet<String> newIds = new HashSet<>();


    lastPage.getPage().getContent().forEach(r -> oldIds.add(r.getId())); // my first lambda :)
    lastPageAgain.forEach(r -> newIds.add(r.getId()));
HashSet oldIds=new HashSet();
HashSet newIds=新HashSet();
lastPage.getPage().getContent().forEach(r->oldIds.add(r.getId());//我的第一个lambda:)
forEach(r->newIds.add(r.getId());

语法略有不同,因为
lastPage
lastPage
实际上是不同的类型

您有多个语法错误。

1)
release
在这里不是变量。
您必须在方法引用中引用
Release
类。

2) 方法引用不必像您在这里所做的那样为方法指定括号:
release::getId()

方法引用总是指方法。
所以
()
确实是隐含的。
此外,方法引用可以引用具有参数的方法。
因此,指定
()
也很容易出错

只需将
release::getId()替换为
release::getId

3)
collect()
无法接受函数,如
release::getId()

在最简单的重载形式中,它希望有一个
收集器
。因此,将
Collectors.toSet()作为参数传递

您只需使用
map()
将某个对象映射到其他对象即可。
请注意,您应该在代码中将
Set
设置为
HashSet

通过接口编程可以提高代码的可维护性。
Collectors.toSet()
遵循这一原则。因此它返回一个
Set
声明的类型

Set<String> oldIds = lastPage.getPage().getContent()
                         .stream()
                         .map(Release::getId).collect(Collectors.toSet());
Set oldIds=lastPage.getPage().getContent()
.stream()
.map(Release::getId).collect(Collectors.toSet());

对于
newid

执行相同的操作,您有多个语法错误。

1)
release
在这里不是变量。
您必须在方法引用中引用
Release
类。

2) 方法引用不必像您在这里所做的那样为方法指定括号:
release::getId()

方法引用总是指方法。
所以
()
确实是隐含的。
此外,方法引用可以引用具有参数的方法。
因此,指定
()
也很容易出错

只需将
release::getId()替换为
release::getId

3)
collect()
无法接受函数,如
release::getId()

在最简单的重载形式中,它希望有一个
收集器
。因此,将
Collectors.toSet()作为参数传递

您只需使用
map()
将某个对象映射到其他对象即可。
请注意,您应该在代码中将
Set
设置为
HashSet

通过接口编程可以提高代码的可维护性。
Collectors.toSet()
遵循这一原则。因此它返回一个
Set
声明的类型

Set<String> oldIds = lastPage.getPage().getContent()
                         .stream()
                         .map(Release::getId).collect(Collectors.toSet());
Set oldIds=lastPage.getPage().getContent()
.stream()
.map(Release::getId).collect(Collectors.toSet());

对于
newIds

我不能100%确定
release::getId()
应该做什么,因为
release
不是您定义的变量。但是如果我理解你想要什么,我想
.forEach(currentRelease::add)
就是了。你完全正确-编译器的错误是版本未定义。不过我想我已经明白了。forEach绝对是正确的选择。我不能100%确定
release::getId()
应该做什么,因为
release
不是您定义的变量。但是如果我理解你想要什么,我想
.forEach(currentRelease::add)
就是了。你完全正确-编译器的错误是版本未定义。不过我想我已经明白了。forEach绝对是正确的选择。这是我用forEach提出的更简洁的版本。我要试一试!谢谢这会在方法引用中抛出
错误的返回类型:无法将java.lang.String转换为R
。它特别不喜欢
.map(Release::getId())
如果
.getId()
是从
Release.java
的父类继承的,那又有什么关系呢?为什么要指定
Release::getId()
。方法引用不必指定括号。所以使用:
Release::getId
我认为格式有点不合适。这篇文章说错误是因为
getId()
没有参数。我已将其调整为:
.stream().map(r->r.getId()).collect(Collectors.toSet())这是我刚刚提出的forEach的一个更简洁的版本。我要试一试!谢谢这会在方法引用中抛出
错误的返回类型:无法将java.lang.String转换为R
。它特别不喜欢
.map(Release::getId())
如果
.getId()
是从
Release.java
的父类继承的,那又有什么关系呢?为什么要指定
Release::getId()
。方法引用不必指定括号。所以使用:
Release::getId
我认为格式有点不合适。这篇文章说错误是因为
getI