Iterator filtrujący - The method is undefined for the type

0
@SuppressWarnings("hiding")
public interface Predicate <Student> {
	 boolean accept(Student stud);	 
		}
import java.util.function.Predicate;

public class StudRok implements Predicate <Student> {
	public boolean accept(Student stud) {
		return stud.getRok() == 2;
	}

	@Override
	public boolean test(Student t) {
		return false;
	}
}

W mainie:

@SuppressWarnings("rawtypes")
		Iterator <Student> iterRok = new FilteredIterator(Studenci.iterator(), new StudRok());
		wyswietl(iterRok);

A tu jest błąd:

import java.util.Iterator;
import java.util.function.Predicate;

@SuppressWarnings("hiding")
public final class FilteredIterator<Student> implements Iterator<Student>{

	private Iterator<Student> iterator;
	private Predicate<Student> predicate;

	private Student stud=null;
	private boolean bHasNext=true;

	public FilteredIterator(Iterator<Student> iterator, Predicate<Student> predicate) {
		super();
		this.iterator = iterator; 
		this.predicate = predicate;
		findNextValid();
	}

	@SuppressWarnings("unchecked")
	private void findNextValid() {
		while (iterator.hasNext()) {
			stud = iterator.next();
			if ((predicate).accept(stud)) {
				return;
			}
		}
		bHasNext=false;
		stud=null;
	}
	
	@Override
	public boolean hasNext() {
		return bHasNext;
	}

	@Override
	public Student next() {
		Student nextValue = stud;
        findNextValid();
        return nextValue;
	}
}

Błąd jest tutaj: if ((predicate).accept(stud)) {

Błąd: The method accept(Student) is undefined for the type Predicate<Student>

Co robię źle?

0

Tu jest błąd:

import java.util.function.Predicate;

albo tu:

@SuppressWarnings("hiding")
public interface Predicate <Student> {
     boolean accept(Student stud);   
        }

Albo chciałeś mieć własny interfejs Predicate, ale wtedy nie powinieneś importować tego z java.util.
Albo nie rób własnego, tylko użyj tamtego.

1 użytkowników online, w tym zalogowanych: 0, gości: 1