List<Person> p2 = new ArrayList<>(p1);

Das würde gehen, wenn du einer Klasse ein Interface hinzufügst.

Beispiel

public class Person1 implements IPerson {

}

public class Person2 implements IPerson {

}

Dann kannst du folgendes machen

List<IPerson> p1 = new ArrayList<>();
List<IPerson> p2 = new ArrayList<>(p1);

Das ganze einmal ohne Interface

import java.util.ArrayList;
import java.util.List;


public class Test {


	public class Person1 {
		private String name;
		private int alter;


		public Person1(String name, int alter) {
			this.name = name;
			this.alter = alter;
		}
	}


	public class Person2 {
		private String name;
		private int alter;


		public Person2(String name, int alter) {
			this.name = name;
			this.alter = alter;
		}
	}
	
	public List<Person1> p1 = new ArrayList<>();
	public List<Person2> p2 = new ArrayList<>();
	
	public void test() {
		p1.forEach(person -> {
			p2.add(new Person2(person.name, person.alter));
		});
	}


}
...zur Antwort