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);
    }
相关推荐
索荣荣4 分钟前
Maven配置文件(pom.xml)终极指南
java·开发语言
代码栈上的思考18 分钟前
SpringBoot 拦截器
java·spring boot·spring
送秋三十五22 分钟前
一次大文件处理性能优化实录————Java 优化过程
java·开发语言·性能优化
雨中飘荡的记忆24 分钟前
千万级数据秒级对账!银行日终批处理对账系统从理论到实战
java
jbtianci30 分钟前
Spring Boot管理用户数据
java·spring boot·后端
Sylvia-girl33 分钟前
线程池~~
java·开发语言
魔力军37 分钟前
Rust学习Day3: 3个小demo实现
java·学习·rust
时艰.41 分钟前
java性能调优 — 高并发缓存一致性
java·开发语言·缓存
落花流水 丶41 分钟前
Java 多线程完全指南
java
jxy99981 小时前
mac mini 安装java JDK 17
java·开发语言·macos