У меня есть мое собственное выполнение в течение нескольких кортежей, вот суть коды для пары:Тип проблема с кортежами и потоков (Java8)
public class Pair<A, B> extends Tuple implements Serializable{
...
public Pair(A a,B b){
this.a=a;
this.b=b;
}
...
public <T> Pair<T,B> mapA(Function<A,T> fun){
return new Pair<T,B>(fun.apply(a),b);
}
...
}
По какой-то странной причине, следующий код не работает а компилятор, похоже, считает, что полученная пара от первого отображения равна <Object,String>
.
List<Pair<String,String>> pairs = ...;
pairs
.stream()
.map(p->mapA(s->s.trim())
.map(p->mapA(s->s.toUpperCase()) //does not recognize a as a string
...
Может ли это быть также Eclipse, действующего? Запуск Eclipse Luna fwiw, который, как представляется, делает дерьмовую работу в целом при определении общих типов из функциональных интерфейсов.
EDIT: полный пример, как просил
public class Pair<A, B> implements Serializable{
public final A a;
public final B b;
public Pair(A a,B b) {
this.a = a;
this.b = b;
}
public <T> Pair<T,B> mapA(Function<A,T> fun){
return new Pair<T,B>(fun.apply(a),b);
}
}
List<Pair<String,String>> pairs = new ArrayList<>();
pairs.add(new Pair<String,String>("foo","bar"));
pairs.stream()
.map(p->p.mapA(s->s.trim()))
.map(p->p.mapA(s->s.toUpperCase()))
.collect(Collectors.toList());
Можете ли вы представить полный и воспроизводимый пример? –
sec ... также попробовал отливку fun.apply (a) to T – Seppo420
@SotiriosDelimanolis забыл hilite – Seppo420