既然lambda表達式只能使用在語句中,如果想跨語句使用之前定義好的lambda表達式,怎麼辦?用什麼類型來表示lambda表達式? 用function類型來表示函數對象類型 bind1st/bind2nd bind 綁定器返回的都是 函數對象 lambda表達式=>函數對象 示例1 map<int ...
前言
說起數組轉換成 ArrayList,很多同學第一反應就是遍曆數組,將元素逐個添加到 ArrayList 中,但是這個看著就lower,一般不會這麼答。
所以馬上就會想到Arrays工具類的 asList 方法,如果你這麼答,那麼恭喜你,答錯入坑。
為什麼不能用 Arrays 的 asList 方法將 int[] 裝換成 ArrayList
如果此處數組 int[] 換作是 Integer[] 或者任何一個引用類型元素的數組都正確,Arrays 的 asList 方法只能轉換引用類型元素的數組。
asList 方法的源碼就是這麼定義的:
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
private static class ArrayList<E> extends AbstractList<E>
implements RandomAccess, java.io.Serializable
{
註意:Arrays.asList(T... a)返回的List中元素是不可變的。
從源碼可以看出Arrays.asList(T... a)返回的是一個ArrayList,但是這個ArrayList是Arrays的內部類,不是我們集合框架下的那個ArrayList。
使用stream進行轉換(jdk8 推薦)
jdk版本低於1.8不可以使用。
數組通過 Arrays 工具類的 stream() 方法進行流化,獲取 Stream 對象。boxed()方法是用來裝箱的。
int[] arys = {1,2,3};
List<Integer> list = Arrays.stream(arys).boxed().collect(Collectors.toList());
要轉化為ArrayList還需要進行一次強制類型轉化
遍曆數組,逐個加入元素到List中
可以使用for、增強for迴圈、迭代器。
使用for迴圈遍曆數組,性能稍微好那麼一丟丟。增強for的本質就是迭代器,寫法更加簡潔。
這裡代碼就做展示了。