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

1.数组转List

1.1. Arrays.asList

复制代码
public class Tesr
{
     public static void main(String[] args) {
        String[] ary = new String[]{ "1", "a"};
        List<String> 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<String> 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<String> 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<String> 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<Integer> 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<String> 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<Integer> 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<String> 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<Integer> 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<String, Integer> 转换成 Map<String, String>

复制代码
public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("a",1);
        map.put("b",2);
        map.put("c",3);
        map.put("d",4);
        Map<String, String> 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<Integer, Integer> 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<Integer> 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);
    }
相关推荐
XuanXu2 分钟前
Java volatile关键字以及线程安全
java
都叫我大帅哥2 分钟前
代码世界的「万能转接头」:适配器模式的跨界艺术
java·后端·设计模式
蝈蝈噶蝈蝈噶12 分钟前
问题:tomcat下部署eureka双重路径
java·eureka·tomcat
禹曦a16 分钟前
Java进阶之旅-day05:网络编程
java·开发语言·网络
五行星辰37 分钟前
Gson修仙指南:谷歌大法的佛系JSON渡劫手册
java·后端
哈哈哈哈哈哈哈哈哈...........42 分钟前
【无标题】object,wait,notifyAll
java·开发语言
Niuguangshuo1 小时前
Python 设计模式:迭代模式
java·python·设计模式
1ven1 小时前
JDBC驱动包的隔离加载与卸载
java
Richard20121 小时前
Java 源码 - Atomic包中的原子操作类总结
java