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 小时前
新人笔记---ApiFox的一些常见使用出错
java·笔记·spring
栗子~~5 小时前
JAVA - 二层缓存设计(本地缓冲+redis缓冲+广播所有本地缓冲失效) demo
java·redis·缓存
YDS8295 小时前
DeepSeek RAG&MCP + Agent智能体项目 —— RAG知识库的搭建和接口实现
java·ai·springboot·agent·rag·deepseek
未若君雅裁6 小时前
MyBatis 一级缓存、二级缓存与清理机制
java·缓存·mybatis
AI人工智能+电脑小能手7 小时前
【大白话说Java面试题 第65题】【JVM篇】第25题:谈谈对 OOM 的认识
java·开发语言·jvm
阿维的博客日记7 小时前
Nacos 为什么能让配置动态生效?(涉及 @RefreshScope 注解)
java·spring
雨辰AI7 小时前
SpringBoot3 + 人大金仓读写分离 + 分库分表 + 集群高可用 全栈实战
java·数据库·mysql·政务
辰海Coding8 小时前
MiniSpring框架学习-完成的 IoC 容器
java·spring boot·学习·架构
小小编程路9 小时前
C++ 多线程与并发
java·jvm·c++
AI视觉网奇9 小时前
linux 检索库 判断库是否支持
java·linux·服务器