Skip to content

java collection operations

gluehloch edited this page Nov 10, 2022 · 3 revisions

Java Collections Must

Copy a List to another

List<Integer> copy = new ArrayList<>(list);
List<Integer> copy = new ArrayList<>();
copy.addAll(list);

Achtung: Falls die Elemente der Liste veränderlich sind, hat eine Änderung an einem Element Auswirkungen auf beide Listen.

List<Integer> source = Arrays.asList(1,2,3);
List<Integer> dest = Arrays.asList(4,5,6);
Collections.copy(dest, source);
List<Integer> source = Arrays.asList(1, 2, 3);
List<Integer> dest = Arrays.asList(5, 6, 7, 8, 9, 10);
Collections.copy(dest, source);

Aus java-examples:

package collections;

import static org.assertj.core.api.Assertions.assertThat;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

import org.assertj.core.util.Arrays;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;

public class CopyCollection {

    @DisplayName("Example: Copy a collection")
    @Tag("collections")
    @Test
    void copyCollections() {
        List<String> strings = List.of("Andre", "Christine", "Adam", "Lars", "Erwin");
        List<String> copy = new ArrayList<>(strings);
        assertThat(copy).containsExactlyElementsOf(strings);
        
        // Achtung: Arrays.asList liefert nicht den generischen Typen zurzueck.
        List<Object> strings2 = Arrays.asList(new String[] {"Andre", "Christine", "Adam", "Lars", "Erwin"});
        assertThat(strings2).hasSize(strings2.size());

        List<Object> destination = Arrays.asList(new String[] {"1", "2", "3", "4", "5", "6"});
        // Achtung: Erstellt keine Kopie wie im oberen Beispiel. Das Element "6" wird in der 
        // 'destination' bei behalten.
        Collections.copy(destination, strings2);
        
        assertThat(destination).hasSize(6);
        assertThat(destination).containsExactly("Andre", "Christine", "Adam", "Lars", "Erwin", "6");
        
        List<String> strings3 = strings.stream().collect(Collectors.toList());
        assertThat(strings3).containsExactlyElementsOf(strings3);
    }

}
package listassert;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.tuple;

import java.util.List;

import org.junit.jupiter.api.Test;

/**
 * Some examples to test a list.
 * 
 * @author Andre Winkler
 */
class ListAssert {

	@SuppressWarnings("static-access")
	@Test
	public void assertJdemo() {
		final Person a = Person.of("Winkler", "Andre");
		final Person b = Person.of("Winkler", "Adam");
		final Person c = Person.of("Winkler", "Lars");
		final Person d = Person.of("Winkler", "Erwin");

		final List<Person> list = List.of(a, b, c, d);

		assertThat(list).extracting("name", "firstName").contains(
				tuple("Winkler", "Andre"),
				tuple("Winkler", "Adam"),
				tuple("Winkler", "Lars"),
				tuple("Winkler", "Erwin"));

		assertThat(list).extracting("name", "firstName").containsOnly(
				tuple("Winkler", "Andre"),
				tuple("Winkler", "Adam"),
				tuple("Winkler", "Lars"),
				tuple("Winkler", "Erwin"));

		assertThat(list).extracting("name", "firstName").containsExactlyInAnyOrder(
				tuple("Winkler", "Andre"),
				tuple("Winkler", "Adam"),
				tuple("Winkler", "Lars"),
				tuple("Winkler", "Erwin"));
	}

	private static class Person {
		public String name;
		public String firstName;

		private Person(String name, String firstName) {
			this.name = name;
			this.firstName = firstName;
		}

		public static Person of(String name, String firstName) {
			return new Person(name, firstName);
		}

		public String getName() {
			return name;
		}

		public String getFirstName() {
			return firstName;
		}
	}

}

Clone this wiki locally