首页 > 解决方案 > '线程“主”java.lang.UnsupportedOperationException 中的异常'

问题描述

例外是在 ListCreator i 'when' 方法行中添加 t 你们可以告诉我为什么我得到这个例外吗?Intelij 在语法和逻辑上没有发现任何错误,那么问题出在哪里?我想制作自己的映射器和选择器(过滤器),我一直得到这个。这里有什么问题吗?你能看看是什么原因造成的吗?我需要使用泛型,而我迷失了这些。

package zad1;
import java.util.*;

public class ListCreator<T> {// Uwaga: klasa musi być sparametrtyzowana

    List<T> list;

    protected ListCreator(List<T> listcreate){
        this.list = listcreate; //kreator robi nowa liste zeby nie modyfikowac
    }

    public static <T> ListCreator<T> collectFrom(List<T> srclist){
        ListCreator<T> listCreator = new ListCreator<>(srclist);
        return listCreator;
    }

    public ListCreator<T> when(Selector<T> selector){
        List<T> nextlist = new ArrayList<>();
        for (T t: this.list){
            if (selector.select(t)){
                this.list.add(t);  //dla kazdego elementu list ktoremu kolejno odpowiada t, jesli spelnia warunek to element jest dodawany do nowej listy
            }
        }
        this.list = nextlist;
        return this;
    }

    public <S> List<S> mapEvery(Mapper<T,S> map){
        List<S> dlist = new ArrayList<>();
        for (T arg: this.list){
            dlist.add(map.map(arg));
        }
        return dlist;
    }
}  


package zad1;



import java.util.*;

public class Main {
  public Main() {
    List<Integer> src1 = Arrays.asList(1,7,9,11,12);
    System.out.println(test1(src1));

    List<String> src2 = Arrays.asList("a", "zzzz", "vvvvvvv");
    System.out.println(test2(src2));
  }

  public List<Integer> test1(List<Integer> src) {
    Selector <Integer> sel = new Selector<Integer>() {
        @Override
        public boolean select(Integer arg) {
            return arg < 10;
        }
    };
    Mapper <Integer,Integer> map = new Mapper<Integer, Integer>() {
        @Override
        public Integer map(Integer arg) {
            return arg + 10;
        }
    };
    return ListCreator.collectFrom(src).when(sel).mapEvery(map);
  }

  public List<Integer> test2(List<String> src) {
    Selector <String> sel = new Selector<String>() {
        @Override
        public boolean select(String arg) {
            if (arg.length() > 3)
                return true;
            else
                return false;
        }
    };
    Mapper <String, Integer> map = new Mapper<String, Integer>() {
        @Override
        public Integer map(String arg) {
            return arg.length() + 10;
        }
    };
    return ListCreator.collectFrom(src).when(sel).mapEvery(map);
  }

  public static void main(String[] args) {
    new Main();
  }
}

标签: java

解决方案


推荐阅读