java中常见的一些小知识(1)

1.数组转List
1.1. Arrays.asList

public class Tesr
{
     public static void main(String[] args) {
        String[] ary = new String[]{ "1", "a"};
        List list = Arrays.asList((ary));
        list.add("ddsdsa");
        System.out.println(list);
    }

}

但是这样写出来的代码是错误的,会出现如下错误:
在这里插入图片描述
这是因为用Arrays.asList转的ArrayList 全路径为 java.util.Arrays.ArrayList , 不支持 add , remove 等操作,这个ArrayList 和咱们常见的不是同一个。
下面是正确的数组转list并且还可以对list进行操作的写法。

public class Tesr
{
     public static void main(String[] args) {
        String[] ary = new String[]{ "1", "a"};
        List list = new ArrayList<>(Arrays.asList((ary)));
        list.add("ddsdsa");
        System.out.println(list);
    }

}

这个是转换的时new一个ArrayList就可以了。

2.list转数组
list.toArray

public static void main(String[] args) {
    List list = Arrays.asList("a", "b", "c");
    String[] strings = list.toArray(new String[]{});
    for(String s:strings){
        System.out.println(s);
    }
}

如果需要指定数据类型,需要传参指定,如上述代码中数组类型为String,则list.toArray中的类型为String数组类型。

3.字符串转list
借助 Collections.addAll 来实现

 public static void main(String[] args) {
        String str = "a,d,f,gf,d,d,f,g,e,er,f,v";
        List list = new ArrayList<>();
        Collections.addAll(list, str.split(","));
        System.out.println(list);

    }

上述是只适用于String类型的写法,只能输出String类型的列表。如果想要改变分隔符可以根据自己的需要在split中进行修改。

如果想要生成的列表为int类型的列表,则可以使用如下的方法:

public static void main(String[] args) {
        String str = "1,2,3,4,5,678,3,4,5,6";
        List collect = Stream.of(str.split(","))
                .map(String::trim)
                .filter(s -> !s.isEmpty())
                .map(Integer::valueOf).collect(Collectors.toList());
        System.out.println(collect);

    }

但是记住字符串中分隔符分割的必须是数字。
4.list转字符串
4.1使用StringBuilder编写

#String类型的列表
public static void main(String[] args) {
        List list=new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        StringBuilder builder = new StringBuilder();
        for (String str: list) {
            builder.append(str).append(",");
        }
        System.out.println(builder.substring(0, builder.length() - 1));
    }

#Integer类型的列表
public static void main(String[] args) {
        List list=new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        StringBuilder builder = new StringBuilder();
        for (Integer str: list) {
            builder.append(str).append(",");
        }
        System.out.println(builder.substring(0, builder.length() - 1));
    }

4.2使用stream流编写

#String类型的列表
public static void main(String[] args) {
        List list=new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("v");
        System.out.println(list.stream().map(String::valueOf).collect(Collectors.joining(",")));
    }

#Integer类型的列表
 public static void main(String[] args) {
        List list=new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        System.out.println(list.stream().map(String::valueOf).collect(Collectors.joining(",")));
    }

5.Map互转
将一个 Map 转换成 Map

public static void main(String[] args) {
        Map map = new HashMap<>();
        map.put("a",1);
        map.put("b",2);
        map.put("c",3);
        map.put("d",4);
        Map ans = map.entrySet().stream().collect(
                Collectors.toMap(Map.Entry::getKey, s -> String.valueOf(s.getValue()), (a,b) -> a));
        System.out.println(ans);
    }

6.函数方法在二维数组中找到偶数

#共用方法
public static void scan(int maxX, int maxY, BiConsumer consumer) {
        for (int i = 0; i < maxX; i++) {
            for (int j = 0; j < maxY; j++) {
                consumer.accept(i, j);
            }
        }
    }
    public static void main(String[] args) {
        int[][] cells = new int[][]{{1, 2, 3, 4}, {11, 12, 13, 14}, {21, 22, 23, 24}};
        List ans = new ArrayList<>();
        scan(cells.length, cells[0].length, (i, j) -> {
            if ((cells[i][j] & 1) == 0) {
                ans.add(cells[i][j]);
            }
        });
        System.out.println(ans);
    }

你可能感兴趣的:(java,list)