Java Collections Class - Java 147

Java Collections Class – Java 147

Java Collections Class

介紹一些常見的方法,像是: sort 、 max 、 min 等,提供了許多靜態方法運用, Collections Class 是集合框架中的工具類之一,本篇增加了範例,並透過單元測試來驗證產出結果。

檔案目錄

./
   +- src
       +- test
       |   +- org
       |       +- ruoxue
       |           +- java_147
       |               +- collection
       |                   +- CollectionsClassTest.java   

單元測試

Java Collections 提供檢查排序、最大值、最小值等,操作集合中的元素。

sort

建立一個 ArrayList ,內有三個元素,排序元素。

	@Test
	public void sort() {
		List<String> list = Arrays.asList("Orange", "Mango", "Peach");
		System.out.println(list);
		Collections.sort(list);
		System.out.println(list);
		assertThat(list).containsExactly("Mango", "Orange", "Peach");

		List<Integer> intList = Arrays.asList(Integer.MAX_VALUE, -1, 3);
		System.out.println(intList);
		Collections.sort(intList);
		System.out.println(intList);
		assertThat(intList).containsExactly(-1, 3, Integer.MAX_VALUE);
	}
[Orange, Mango, Peach]
[Mango, Orange, Peach]
[2147483647, -1, 3]
[-1, 3, 2147483647]

sortWithComparator

Java Collections 建立一個 ArrayList ,內有三個元素,使用 Comparator 自定義規則,排序元素。

	protected static Comparator<String> nameComparator = new Comparator<String>() {
		@Override
		public int compare(String o1, String o2) {
			return o1.compareTo(o2);
		}
	};

	protected static Comparator<Integer> valueComparator = new Comparator<Integer>() {
		@Override
		public int compare(Integer i1, Integer i2) {
			return Integer.compare(i1, i2);
		}
	};

	@Test
	public void sortWithComparator() {
		List<String> list = Arrays.asList("Orange", "Mango", "Peach");
		System.out.println(list);
		Collections.sort(list, nameComparator);
		System.out.println(list);
		assertThat(list).containsExactly("Mango", "Orange", "Peach");

		List<Integer> intList = Arrays.asList(Integer.MAX_VALUE, 3, -1);
		System.out.println(intList);
		Collections.sort(intList, valueComparator);
		System.out.println(intList);
		assertThat(intList).containsExactly(-1, 3, Integer.MAX_VALUE);
	}
[Orange, Mango, Peach]
[Mango, Orange, Peach]
[2147483647, 3, -1]
[-1, 3, 2147483647]

sortWithLambda

Java Collections 建立一個 ArrayList ,內有三個元素,使用 Lambda 自定義規則,排序元素。

	@Test
	public void sortWithLambda() {
		List<String> list = Arrays.asList("Orange", "Mango", "Peach");
		System.out.println(list);
		Collections.sort(list, (o1, o2) -> o1.compareTo(o2));
		System.out.println(list);
		assertThat(list).containsExactly("Mango", "Orange", "Peach");

		List<Integer> intList = Arrays.asList(Integer.MAX_VALUE, -1, 3);
		System.out.println(intList);
		Collections.sort(intList, (i1, i2) -> Integer.compare(i1, i2));
		System.out.println(intList);
		assertThat(intList).containsExactly(-1, 3, Integer.MAX_VALUE);
	}
[Orange, Mango, Peach]
[Mango, Orange, Peach]
[2147483647, -1, 3]
[-1, 3, 2147483647]

max

Collections in Java 建立一個 ArrayList ,內有三個元素,取最大元素。

	@Test
	public void max() {
		List<String> list = Arrays.asList("Orange", "Mango", "Peach");
		String result = Collections.max(list);
		System.out.println(result);
		assertThat(result).isEqualTo("Peach");

		List<Integer> intList = Arrays.asList(Integer.MAX_VALUE, 3, -1);
		int intResult = Collections.max(intList);
		System.out.println(intResult);
		assertThat(intResult).isEqualTo(Integer.MAX_VALUE);
	}
Peach
2147483647

min

Collections in Java 建立一個 ArrayList ,內有三個元素,取最小元素。

	@Test
	public void min() {
		List<String> list = Arrays.asList("Orange", "Mango", "Peach");
		String result = Collections.min(list);
		System.out.println(result);
		assertThat(result).isEqualTo("Mango");

		List<Integer> intList = Arrays.asList(Integer.MAX_VALUE, 3, -1);
		int intResult = Collections.min(intList);
		System.out.println(intResult);
		assertThat(intResult).isEqualTo(-1);
	}
Mango
-1

singletonList

Collections in Java 建立只有一個元素的集合 ,操作新增、刪除等方法,會拋出例外。

	@Test
	public void singletonList() {
		List<String> list = Collections.singletonList("Orange");
		System.out.println(list);
		assertThat(list).hasSize(1);
		assertThatCode(() -> list.add("Mango")).isInstanceOf(UnsupportedOperationException.class);

		List<Integer> intList = Collections.singletonList(Integer.MAX_VALUE);
		System.out.println(intList);
		assertThat(intList).hasSize(1);
		assertThatCode(() -> intList.add(3)).isInstanceOf(UnsupportedOperationException.class);
	}
[Orange]
[2147483647]

emptyList

Collections in Java 建立空集合 ,操作新增、刪除等方法,會拋出例外。

	@Test
	public void emptyList() {
		List<String> list = Collections.emptyList();
		System.out.println(list);
		assertThat(list).hasSize(0);
		assertThatCode(() -> list.add("Mango")).isInstanceOf(UnsupportedOperationException.class);

		List<Integer> intList = Collections.emptyList();
		System.out.println(intList);
		assertThat(intList).hasSize(0);
		assertThatCode(() -> intList.add(3)).isInstanceOf(UnsupportedOperationException.class);
	}
[]
[]

CollectionsClassTest.java

Collections in Java 新增單元測試,驗證是否符合預期。

package org.ruoxue.java_147.collection;

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

import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import org.junit.Test;

public class CollectionsClassTest {

	@Test
	public void sort() {
		List<String> list = Arrays.asList("Orange", "Mango", "Peach");
		System.out.println(list);
		Collections.sort(list);
		System.out.println(list);
		assertThat(list).containsExactly("Mango", "Orange", "Peach");

		List<Integer> intList = Arrays.asList(Integer.MAX_VALUE, -1, 3);
		System.out.println(intList);
		Collections.sort(intList);
		System.out.println(intList);
		assertThat(intList).containsExactly(-1, 3, Integer.MAX_VALUE);
	}

	protected static Comparator<String> nameComparator = new Comparator<String>() {
		@Override
		public int compare(String o1, String o2) {
			return o1.compareTo(o2);
		}
	};

	protected static Comparator<Integer> valueComparator = new Comparator<Integer>() {
		@Override
		public int compare(Integer i1, Integer i2) {
			return Integer.compare(i1, i2);
		}
	};

	@Test
	public void sortWithComparator() {
		List<String> list = Arrays.asList("Orange", "Mango", "Peach");
		System.out.println(list);
		Collections.sort(list, nameComparator);
		System.out.println(list);
		assertThat(list).containsExactly("Mango", "Orange", "Peach");

		List<Integer> intList = Arrays.asList(Integer.MAX_VALUE, 3, -1);
		System.out.println(intList);
		Collections.sort(intList, valueComparator);
		System.out.println(intList);
		assertThat(intList).containsExactly(-1, 3, Integer.MAX_VALUE);
	}

	@Test
	public void sortWithLambda() {
		List<String> list = Arrays.asList("Orange", "Mango", "Peach");
		System.out.println(list);
		Collections.sort(list, (o1, o2) -> o1.compareTo(o2));
		System.out.println(list);
		assertThat(list).containsExactly("Mango", "Orange", "Peach");

		List<Integer> intList = Arrays.asList(Integer.MAX_VALUE, -1, 3);
		System.out.println(intList);
		Collections.sort(intList, (i1, i2) -> Integer.compare(i1, i2));
		System.out.println(intList);
		assertThat(intList).containsExactly(-1, 3, Integer.MAX_VALUE);
	}

	@Test
	public void max() {
		List<String> list = Arrays.asList("Orange", "Mango", "Peach");
		String result = Collections.max(list);
		System.out.println(result);
		assertThat(result).isEqualTo("Peach");

		List<Integer> intList = Arrays.asList(Integer.MAX_VALUE, 3, -1);
		int intResult = Collections.max(intList);
		System.out.println(intResult);
		assertThat(intResult).isEqualTo(Integer.MAX_VALUE);
	}

	@Test
	public void min() {
		List<String> list = Arrays.asList("Orange", "Mango", "Peach");
		String result = Collections.min(list);
		System.out.println(result);
		assertThat(result).isEqualTo("Mango");

		List<Integer> intList = Arrays.asList(Integer.MAX_VALUE, 3, -1);
		int intResult = Collections.min(intList);
		System.out.println(intResult);
		assertThat(intResult).isEqualTo(-1);
	}

	@Test
	public void singletonList() {
		List<String> list = Collections.singletonList("Orange");
		System.out.println(list);
		assertThat(list).hasSize(1);
		assertThatCode(() -> list.add("Mango")).isInstanceOf(UnsupportedOperationException.class);

		List<Integer> intList = Collections.singletonList(Integer.MAX_VALUE);
		System.out.println(intList);
		assertThat(intList).hasSize(1);
		assertThatCode(() -> intList.add(3)).isInstanceOf(UnsupportedOperationException.class);
	}

	@Test
	public void emptyList() {
		List<String> list = Collections.emptyList();
		System.out.println(list);
		assertThat(list).hasSize(0);
		assertThatCode(() -> list.add("Mango")).isInstanceOf(UnsupportedOperationException.class);

		List<Integer> intList = Collections.emptyList();
		System.out.println(intList);
		assertThat(intList).hasSize(0);
		assertThatCode(() -> intList.add(3)).isInstanceOf(UnsupportedOperationException.class);
	}
}

心得分享

Java Collections Example 使用靜態方法對集合進行操作,提供了幾種 Collections 常見方法的操作範例, Collections in Java 在應用上相當廣泛,熟悉這些方法的操作,能夠提高開發效率,節省維護上的成本。

發佈留言