将列表转换为Java中的另一个列表

时间:2020-04-19 17:15:55

标签: java

这是我的问题:

private List<Package<Par<K, F>>> packages;

public void createPackages(List<Par<K, F>> entrys) {     
}

这应该从条目列表创建包,每个条目是一对;每个包将仅包含与第一个元素值相等的条目。 Package和Par是我拥有的其他类。

如果有人可以帮助我,我将非常感激。

1 个答案:

答案 0 :(得分:2)

因此,基本上,您打算做的就是将所有内容打包到此Package类中,如果我没有误会。

我假设您的Package类看起来像这样

float()

或者至少有点相似

那么您应该能够像这样转换您的列表

public class Package<T>{
    List<T> a;
    public Package(List<T> a){
        this.a = a;
    }

    @Override
    public String toString() {
        return "Packaged {" +a.toString() + "}";
    }
}

我已经使用以下代码对此进行了测试

Map<Integer, List<Pair<Integer,Integer>>> test = l.stream().collect(Collectors.groupingBy(Pair::getKey));

List<Package<Pair<Integer,Integer>>> newList = test.values().stream().map(Package::new).collect(Collectors.toList());

这将提供以下输出public class Main { public static void main(String[] args) { List<Pair<Integer,Integer>> l = new LinkedList<>(); l.add(new Pair(1,1)); l.add(new Pair(2,2)); l.add(new Pair(2,3)); System.out.println(l); Map<Integer, List<Pair<Integer,Integer>>> test = l.stream().collect(Collectors.groupingBy(Pair::getKey)); List<Package<Pair<Integer,Integer>>> newList = test.values().stream().map(Package::new).collect(Collectors.toList()); System.out.println(newList); } }

您所做的基本上是为列表中的每个[Packaged {[1=1]}, Packaged {[2=2, 2=3]}]调用new Package(element)。如果需要特殊类型的列表,例如在ArrayList和LinkedList之间进行转换,则可以使用element代替toList。

希望这回答了您的问题。 干杯

有关更多信息:https://www.baeldung.com/java-groupingby-collector