Почему не вызываются методы объекта из arraylist с помощью stream (кроме toString)?
Целый день пытаюсь разобраться с java stream
, но не могу понять одной вещи.
Есть класс SomeClass
, в нем есть переопределенный public String toString()
и есть другие методы, например, public void someMethod()
.
Далее, есть ArrayList
экземпляров этого класса и Stream:
List<SomeClass> someList = new ArrayList<>();
Stream someStream = someList.stream();
Если я пытаюсь с помощью stream.filter
вызвать toString()
, он вызывается, а если пытаюсь вызвать любой другой метод, то он не доступен.
Так как же вызывать другие методы?!
Вот мой класс SomeClass
:
public class SomeClass {
String name;
SomeClass(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public String toString() {
return name;
}
public void someMethod(){
System.out.println("someMethod()" + name);
}
}
Вот класс с методом main()
:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
public class Test {
public static void main(String[] args) {
List<SomeClass> someList = new ArrayList<>();
someList.add(new SomeClass("A"));
someList.add(new SomeClass("B"));
Stream someStream = someList.stream();
someStream.filter(x -> "A".equals(x.toString())).forEach(x -> System.out.println(x.toString())); //работает
someStream.filter(x -> "A".equals(x.toString())).forEach(x -> x.someMethod()); //someMethod() не доступен
someStream.filter(x -> "A".equals(x.getName())).forEach(x -> x.someMethod()); //getName() тоже не доступен
}
}
Ошибка:
Cannot resolve method 'someMethod' in 'Object'