练习LINQ Select函数遇编译错误:无法赋值,目标为方法组
解决Java Stream筛选Pair对象的编译错误
嘿,我帮你搞定这个编译错误啦!问题出在你调用getter方法的方式上——咱们来一步步捋清楚:
错误根源
你在筛选条件里直接写了getN1,Java会把它当成方法组(也就是方法本身的引用),而不是调用方法后得到的返回值,自然没法和数字1做比较,这就是你看到“无法赋值给目标,因为它是一个‘方法组’”错误的原因。
先补全你未写完的代码(方便对照)
你原来的代码大概是这样的:
public class Pair { private int n1; private int n2; public Pair(int n1, int n2) { this.n1 = n1; this.n2 = n2; } public int getN1() { return this.n1; } public static void main(String[] args) { Pair pair1 = new Pair(1, 2); Pair pair2 = new Pair(3, 4); List<Pair> pairs = Arrays.asList(pair1, pair2); // 这里是你出错的代码: // List<Pair> filtered = pairs.stream().filter(p -> p.getN1 == 1).collect(Collectors.toList()); } }
修正后的完整代码
只需要把getN1改成getN1()(加上括号调用方法),就能正确拿到n1的数值进行比较了:
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Pair { private int n1; private int n2; public Pair(int n1, int n2) { this.n1 = n1; this.n2 = n2; } public int getN1() { return this.n1; } public int getN2() { return this.n2; } public static void main(String[] args) { Pair pair1 = new Pair(1, 2); Pair pair2 = new Pair(3, 4); List<Pair> pairs = Arrays.asList(pair1, pair2); // 正确的筛选逻辑 List<Pair> filteredPairs = pairs.stream() .filter(pair -> pair.getN1() == 1) // 必须调用getN1()方法获取数值 .collect(Collectors.toList()); // 验证筛选结果 filteredPairs.forEach(p -> System.out.println("符合条件的Pair:n1=" + p.getN1() + ", n2=" + p.getN2())); } }
额外小提醒
如果你习惯了C#的LINQ语法,可能会不小心把Java的getter方法当成属性直接访问,但Java没有自动属性的语法,必须显式调用getXxx()方法哦~另外,Java里类似LINQ的功能是Stream API,用法和LINQ相近但语法细节有差异,注意区分就行啦!
内容的提问来源于stack exchange,提问作者user9536923
相关产品推荐
相关产品推荐

