Java基础-Java后端漫漫长路的伊始(3)
本文最后更新于 291天前,其中的信息可能已经有所发展或是发生改变。若对文章内容存疑,或是本文的转载部分侵犯了您的权益,请联系博主 3240572824@qq.com

来到Java进阶

Stream

流,可以理解成流水线,是对集合对象的功能增强。它结合Lambda表达式,专注于对集合对象进行各种非常便利、高效的聚合操作,或者大批量数据操作,既简便又利于阅读。

使用步骤

获取到一条Stream流,并加入数据

图片截自b站阿玮老师的Java课程视频,文章末尾已标明出处

其中,双列集合需要先转为单列集合,再使用流。

HashMap<String, Integer> hm = new HashMap<>();
        hm.put("aaa", 111);
        hm.put("bbb", 222);
        hm.put("ccc", 333);
        hm.put("ddd", 444);

        // 第一种获取stream流
        hm.keySet().stream().forEach(key -> System.out.println(key));

        // 第二种获取stream流
        hm.entrySet().stream().forEach(keyValue-> System.out.println(keyValue));

利用Stream流中的API进行各种操作

对流中数据的操作分为两类

  • 中间操作/中间方法 方法调用完毕后,还可以调用其他方法,例如过滤、转换操作等
  • 终结操作/终结方法 方法的最后一步,调用完毕后就得到最终结果,例如统计、打印操作等

方法引用

将已有的方法拿来使用,当作函数式接口中抽象方法的方法体 (用符号“::”表示)

要求

  • 引用处需要函数式接口
  • 被引用方法需已存在(Java写好或第三方库)
  • 被引用方法形参与返回值与抽象方法形参 返回值一致
  • 被引用方法功能满足需求

常见使用场景

静态方法引用

ArrayList<String>list=new ArrayList<>();
        Collections.addAll(list,"1","5","4","6","7");

list.stream()
                .map(Integer::parseInt)
                .forEach(s-> System.out.print(s)); // 15467

成员方法引用

public class StringOperation {
    public boolean stringJudge(String s) {
        return s.startsWith("张") && s.length() == 2;
    }
}

ArrayList<String>list=new ArrayList<>();
        Collections.addAll(list,"张三","张山","周珊","张三风","李四");
list.stream()
                .filter(new StringOperation()::stringJudge)
                .forEach(s-> System.out.println(s));
    } // 张三
      // 张山

特定类的任意对象方法引用

ArrayList<String>list=new ArrayList<>();
        Collections.addAll(list,"aaa","bbb","ccc","ddd");
list.stream().map(String::toUpperCase).forEach(s -> System.out.println(s));
// AAA
// BBB
// CCC
// DDD

构造方法引用

ArrayList<String> list=new ArrayList<>();
        Collections.addAll(list,"张三,12","张山,13","周珊,24","张三风,23","李四,34");
List<Student> newList1 = list.stream().map(Student::new).collect(Collectors.toList());
        System.out.println(newList1);
 // [Student{name = 张三, age = 12}, Student{name = 张山, age = 13}, Student{name = 周珊, age = 24}, Student{name = 张三风, age = 23}, Student{name = 李四, age = 34}]

数组引用

用于创建一指定类型的数组,注意创建数组的类型需与流中数据类型一致。

ArrayList<Integer>list=new ArrayList<>();
        Collections.addAll(list,1,2,3,4,5,6,7);
Integer[] arr = list.stream().toArray(Integer[]::new);
        System.out.println(Arrays.toString(arr)); // [1, 2, 3, 4, 5, 6, 7]

异常

程序中可能出现的问题。是查询bug的关键参考信息,亦可作为方法的返回值,用于通知调用处底层的执行情况。异常分为两类:

  • 编译时异常(未继承RuntimeException的异常,直接继承于Exception,编译阶段就会报错)
  • 运行时异常(RuntimeException本身和子类,编译阶段不会报错,运行时出现)

异常处理

对于异常,JVM默认会将其信息(异常名称、原因、出错的位置等)打印在控制台,并停止程序运行(异常之后的代码不再运行)。

除了系统对异常的默认处理方式之外,也可以自己处理异常

  • try catch 捕获-捕获异常,执行处理逻辑,还可以添加finally语句强制执行某代码块
  • throw 抛出-将异常上抛给调用者,并终止程序
int[]arr={1,2,3,4,5,6,7};
        System.out.println("啊对对对!");

        try{
            // 可能出异常的代码
            System.out.println(arr[10]);// 此处出现异常 程序于此处创建一个ArrayIndexOutOfBoundsException对象
                                        // new ArrayIndexOutOfBoundsException();
                                        // 拿着这个对象到小括号中对比,看括号中的变量是否可接收此对象
                                        // 若接收 即该异常被捕获 继而执行catch内的代码
                                        // 当catch内代码执行完毕 则程序不被打断 try catch后的代码正常执行

        }catch (ArrayIndexOutOfBoundsException e){
            System.out.println("对你大爹");
        }
        System.out.println("有点东西");// 因为有try catch而未被影响 正常运行
// 啊对对对!
// 对你大爹
// 有点东西

文件与文件流

文件对象 File

File对象表示一个路径,可以是文件路径或是文件夹路径。分为两类:

  • 相对路径 “a.text”
  • 绝对路径 “c:\\a.text”

三种构造方法

  • public File(String pathname) 将字符串表示的路径变成File对象
  • public File(String parent,String child) 将父级/子级路径拼接
  • public File(File parent,String child) 将父级路径与子级路径字符串拼接

常见成员方法

  • public boolean isDirectory() 判断此路径表示的File是否为文件夹
  • public boolean isFile() 判断此路径表示的File是否为文件
  • public boolean exists() 判断此路径表示的File是否存在
  • public long length() 返回文件的大小(字节数)
  • public boolean createNewFile() 创建一个新的空文件
  • public boolean mkdir() 创建单级文件夹
  • public boolean mkdirs() 创建多级文件夹
  • public boolean delete() 删除文件、文件夹
  • public File[] listFiles() 获取此路径下所有内容

文件流 IOStream

此内容也是非常庞大且重要,所以我在另一篇文章中做更详细的总结阐述,链接如下。

相关链接

作者:Gaspard
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0协议
若是幸得赏识、转载,还请注明文章地址及作者哦~
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇