实用小知识点

目录

1 封装一周的开始时间和结束时间

2 getOrDefault() 方法使用

3 stream流中 map() 和 collect() 方法

4 @PostConstruct @PreDestroy注解使用方法

5 StringBuilder和StringBuffer类

5.1 append()

5.2 insert()

5.3 delete()

5.4 reverse()

5.5 capacity()

5.6 length()

5.7 charAt()

6 常用的判断非空的工具类方法


1 封装一周的开始时间和结束时间

可以将这两个方法封装在一个工具类中,例如DateUtil,具体实现如下:

import java.time.LocalDate;
import java.time.LocalDateTime;

public class DateUtil {
    /**
     * 获取本周开始时间,即本周一 00:00:00
     *
     * @param now 当前日期
     * @return 本周开始时间
     */
    public static LocalDateTime getWeekBeginTime(LocalDateTime now) {
        int daysBefore = now.getDayOfWeek().getValue() - 1;
        return now.minusDays(daysBefore).toLocalDate().atStartOfDay();
    }

    /**
     * 获取本周结束时间,即本周日 23:59:59
     *
     * @param now 当前日期
     * @return 本周结束时间
     */
    public static LocalDateTime getWeekEndTime(LocalDateTime now) {
        int daysAfter = 7 - now.getDayOfWeek().getValue();
        return now.plusDays(daysAfter).toLocalDate().atStartOfDay().plusHours(23).plusMinutes(59).plusSeconds(59);
    }
}
    /*
    now.plusDays(daysAfter):计算出离当前日期 now 的本周日有多少天 (daysAfter),然后加上这个                    
    天数得到本周日的日期时间。

    toLocalDate():将日期时间转换为本地日期。

    atStartOfDay():将日期转换为当天的开始时间,即00:00:00。

    plusHours(23).plusMinutes(59).plusSeconds(59):在当天的开始时间基础上,加上23小时59分                    
     钟59秒,得到当天的结束时间,即23:59:59。

    综合起来,以上几个方法的调用就表示将当前日期 now 加上距离本周日还有多少天 daysAfter,得到 
    本周日的日期时间,然后将日期转换为本地日期,并设置为当天的开始时间,最后再加上23小时59分钟 
    59秒,得到当天的结束时间,即本周的结束时间。
    */
LocalDateTime now = LocalDateTime.now();
LocalDateTime weekBeginTime = DateUtil.getWeekBeginTime(now); // 本周开始时间
LocalDateTime weekEndTime = DateUtil.getWeekEndTime(now);   // 本周结束时间

2 getOrDefault() 方法使用

getOrDefault()Map 接口中定义的一个方法,用于获取指定键对应的值。如果该键不存在,则返回默认值。

getOrDefault(Object key, V defaultValue) 方法接收两个参数:

        key:要获取值的键。

        defaultValue:默认值。当该键不存在时,将返回该默认值。

getOrDefault() 方法的作用是,当 Map 中存在指定键时,返回该键对应的值;否则返回指定的默认值。

下面是一个使用 getOrDefault() 方法的示例:

Map<String, Integer> map = new HashMap<>();
map.put("apple", 1);
map.put("banana", 2);

// 获取 "apple" 对应的值
Integer appleCount = map.getOrDefault("apple", 0); // 返回 1

// 获取 "orange" 对应的值
Integer orangeCount = map.getOrDefault("orange", 0); // 返回 0

在上述代码中,我们定义了一个 Map 对象 map,并向其中添加了两个键值对:"apple" 对应的值为 1,"banana" 对应的值为 2。

接着,我们分别使用 getOrDefault() 方法获取了 "apple" 和 "orange" 对应的值。由于 "apple" 存在于 map 中,因此返回 1;而 "orange" 不存在于 map 中,因此返回 0(即指定的默认值)。

总之,getOrDefault() 方法为 Map 提供了一种方便的方式,用于获取指定键对应的值,并在键不存在时返回默认值。

3 stream流中 map()collect() 方法

map() 方法是 Stream 中的一种中间操作方法,用于将集合中的元素进行转换并生成一个新的 Stream。具体来说,map() 方法接收一个函数式接口作为参数,该函数式接口用于对集合中的每个元素进行转换,转换后的结果会构成一个新的 Stream 对象。

以下是 map() 方法的基本用法示例:

List<String> list = Arrays.asList("apple", "banana", "orange");
Stream<String> stream = list.stream().map(s -> s.toUpperCase());

上面先定义了一个字符串列表 list,包含了三个元素:"apple"、"banana"、"orange"。接着,通过 list.stream() 方法将其转换为一个 Stream 对象。然后,通过 map() 方法将 Stream 中的所有字符串转换成大写字母,并返回一个新的 Stream 对象。

需要注意的是,map() 方法不会改变原集合的元素,而是返回一个新的 Stream 对象。

collect() 方法也是 Stream 中的一种终止操作方法,用于将 Stream 中的元素收集到一个容器中,例如 ListSetMap 等。

除了将元素收集到容器中之外,collect() 方法还可以对收集后的结果进行操作和处理,例如去重、排序、计数等。

以下是 collect() 方法的基本用法示例:

List<String> list = Arrays.asList("apple", "banana", "orange");
List<String> resultList = list.stream().map(s -> s.toUpperCase()).collect(Collectors.toList());

上面先定义了一个字符串列表 list,包含了三个元素:"apple"、"banana"、"orange"。接着,通过 list.stream() 方法将其转换为一个 Stream 对象。然后,通过 map() 方法将 Stream 中的所有字符串转换成大写字母,并通过 Collectors.toList() 方法将所有元素收集到一个新的 List 对象 resultList 中。

需要注意的是,collect() 方法不会改变原集合或 Stream 中的元素,而是将其收集到一个新的容器中。同时,collect() 方法还可以接收一个 Collector 参数,该参数用于对收集后的结果进行进一步处理和操作,例如去重、排序、计数等。

@PostConstruct @PreDestroy注解使用方法

@PostConstruct 用来标记一个方法,在该类被实例化并且所有依赖关系被注入后自动调用该方法。该注解被放置在需要调用初始化方法的方法上,通常是一个无参数的方法。该方法可以用来进行一些初始化操作,如建立数据库连接、加载配置文件等。Spring 容器对使用了 @PostConstruct 注解的方法进行封装,以确保这个方法在其他依赖注入完成后被调用。例如:

java
public class MyClass {
    @PostConstruct
    public void init() {
        // 初始化操作
    }
}

在上面的示例中,当 MyClass 被实例化并且所有依赖注入完成之后,Spring 容器会自动调用 init() 方法来执行初始化操作。

@PreDestroy 注解可以用来标记一个方法,在 Bean 销毁之前自动调用该方法。该注解被放置在需要调用销毁方法的方法上,通常是一个无参数的方法。这个方法可以用来进行一些清理操作,例如关闭数据库连接、停止线程等。Spring 容器对使用了 @PreDestroy 注解的方法进行封装,以确保在销毁 Bean 之前该方法被调用。例如:

public class MyClass {
    @PreDestroy
    public void destroy() {
        // 清理操作
    }
}

在上面的示例中,当 MyClass Bean 销毁之前,Spring 容器会自动调用 destroy() 方法来执行清理操作。

需要注意的是,@PostConstruct@PreDestroy 注解只能应用于 Bean 的方法上,而不能应用于字段上、构造函数上或其他地方。同时,这两个注解在使用时需要导入相应的依赖包,例如:


<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.2</version>
</dependency>

@PostConstruct@PreDestroy 注解是 JavaEE 规范中提供的两个注解,用于标记需要被 Spring 容器封装的初始化方法和销毁方法。这两个注解可以用于进行各种初始化和清理操作,从而确保应用程序的正确运行和退出。

5 StringBuilder和StringBuffer类

在Java编程中,若要操作字符串并且频繁改变字符串内容,建议使用StringBuilder或StringBuffer类,而不直接使用String类型。

String类型是不可变的(immutable),也就是说,一旦一个String对象被创建后,其值就不能再次修改。因此,每当对String类型进行修改时,都会创建一个新的对象来存储修改后的内容,这对内存和性能造成了很大的影响。而StringBuilder和StringBuffer类则可以动态地修改字符串,避免了反复创建新的对象。所以在循环中执行字符串拼接操作会产生大量临时对象,增加了垃圾回收压力和性能开销。为了避免这种情况,我们可以使用 StringBuilder 类来优化字符串拼接操作。

StringBuilder和StringBuffer类的实现非常相似,都提供了append()、insert()等方法来进行字符串的拼接和插入操作。唯一的区别在于,StringBuffer是线程安全的,而StringBuilder是非线程安全的。如果在多线程环境下进行操作,应该使用StringBuffer;否则,应该使用StringBuilder。

5.1 append()

append() 用于将指定的字符串添加到当前 StringBuilder 对象的末尾,并返回当前对象的引用。

StringBuilder sb = new StringBuilder("Hello");
sb.append(" world");
System.out.println(sb.toString()); // "Hello world"

5.2 insert()

insert() 方法用于将指定字符串出入到当前StringBuilder对象的指定位置,并返回当前对象的引用。

StringBuilder sb = new StringBuilder("Hello world");
sb.insert(5, ", ");
System.out.println(sb.toString()); // "Hello, world"

5.3 delete()

delete() 方法用于删除从 start 开始到 end 结束(不包括 end)的字符,并返回当前对象的引用。

StringBuilder sb = new StringBuilder("Hello, world");
sb.delete(5, 7);
System.out.println(sb.toString()); // "Hello world"

5.4 reverse()

reverse() 方法用于将当前 StringBuilder 对象中的字符序列反转,并返回当前对象的引用。

StringBuilder sb = new StringBuilder("Hello, world");
sb.reverse();
System.out.println(sb.toString()); // "dlrow ,olleH"

5.5 capacity()

capacity() 方法用于获取当前 StringBuilder 对象的容量,即可以存储的最大字符数。

StringBuilder sb = new StringBuilder(16);
System.out.println(sb.capacity()); // 16

5.6 length()

length() 方法用于获取当前 StringBuilder 对象中的字符数。

StringBuilder sb = new StringBuilder("Hello, world");
System.out.println(sb.length()); // 12

5.7 charAt()

charAt() 方法用于获取当前 StringBuilder 对象中指定位置的字符。

StringBuilder sb = new StringBuilder("Hello, world");
System.out.println(sb.charAt(0)); // 'H'

6 常用的判断非空的工具类方法

  • 判断字符串是否为空:StringUtils.isEmpty(str),如果 str 为 null 或空字符串则返回 true,否则返回 false
  • 判断集合是否为空:CollectionUtils.isEmpty(coll),如果 coll 为 null 或空集合则返回 true,否则返回 false
  • 判断数组是否为空:ArrayUtils.isEmpty(array),如果 array 为 null 或空数组则返回 true,否则返回 false
  • 判断对象是否为 nullObjectUtils.isNull(obj),如果 obj 为 null 则返回 true,否则返回 false
  • 判断对象是否非 nullObjectUtils.nonNull(obj),如果 obj 非 null 则返回 true,否则返回 false

判断非空则使用ObjectUtils.isNotEmpty(obj) 方法。该方法接收一个 Object 类型的参数,如果参数不为 null 且非空(对于字符串判断非空是指既不为 null 也不是空字符串),则返回 true;否则返回 false。例如:

java
String str = "foo";
if (ObjectUtils.isNotEmpty(str)) {
    System.out.println("str is not null and not empty");
} else {
    System.out.println("str is null or empty");
}

List<String> list = new ArrayList<>();
if (ObjectUtils.isNotEmpty(list)) {
    System.out.println("list is not null and not empty");
} else {
    System.out.println("list is null or empty");
}

在上述代码中,第一个 if 语句会输出 str is not null and not empty,因为变量 str 的值为 "foo",即非空字符串。而第二个 if 语句会输出 list is null or empty,因为变量 list 的值为一个空列表,即既为 null 也为空集合。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《张魏满分宝典 知识点 pdf》是一本汇总了张魏满分宝典系列的知识点的电子书籍。张魏满分宝典系列是一套备考参考书籍,主要针对高中生的各个科目进行详细的知识点解析和总结。该系列书籍的特点是贴近课本内容,简洁明了,容易理解。而《张魏满分宝典 知识点 pdf》则是将这一系列书籍中的重点知识内容整理成电子版,方便学生随时随地进行学习。 这本电子书的内容主要包括数学、语文、英语、物理、化学和生物等科目的知识点,涵盖了高中阶段所需的全部科目。每个科目的知识点被清晰地列出,配有详细的解释和例题,方便学生进行学习和巩固。同时,书中还附带了一些习题,帮助学生巩固所学内容并进行自我评估。 通过使用《张魏满分宝典 知识点 pdf》,学生可以系统性地学习和掌握高中各科目的核心知识点,提高自己的学习效果和考试成绩。同时,电子版的形式使得学生可以随时随地进行学习,不再受限于纸质书籍的地点和重量。 总而言之,《张魏满分宝典 知识点 pdf》是一本对于高中生备考十分有用的电子书籍,它提供了全面而简明的知识点总结和解析,帮助学生更好地掌握并运用所学知识。对于希望提高考试成绩的学生来说,这本电子书将是他们备考的得力助手。 ### 回答2: 《张魏满分宝典 知识点PDF》是一本针对各大学科的考试知识点进行整理和总结的电子书。该书结合了张魏教育的教学经验和学生的实际需求,以全面、系统、易懂的方式呈现了各个学科的重要知识点。 首先,该宝典的内容经过了精心筛选,每个知识点都是经过专业老师反复审核和整理的。这保证了宝典的准确性和权威性,能够帮助学生深入理解和掌握各个学科的核心知识。 其次,宝典以清晰、简明的语言解释了每个知识点,并结合大量的例题进行讲解和实践。这样的设计使得学生在阅读宝典的过程中能够更好地理解知识点,并且通过例题的实践运用来提高应对考试的能力。 此外,宝典还提供了一些学科相关的解题技巧和方法。这些技巧和方法可以帮助学生更高效地解决考试中的各种问题,提升解题速度和准确率。 最后,宝典的PDF格式方便学生随时随地进行查阅和学习。学生可以通过电脑、平板或手机等设备进行阅读,无需携带大量纸质书籍,更加便捷实用。 总之,张魏满分宝典 知识点PDF是一本系统、准确、便捷的学科知识点总结电子书。它能够帮助学生深入理解各个学科的重要知识,掌握解题技巧,提高应对考试的能力。无论是备考还是日常学习,这本宝典都是学生们的良师益友。 ### 回答3: 张魏满分宝典是一本很重要的学习资料,它涵盖了各个学科的知识点。而PDF格式则是一种电子文档格式,它可以在不同设备上进行浏览和分享。 首先,张魏满分宝典是一本综合性的学习资料,它包含了各个学科的重要知识点。不论是语文、数学、英语还是科学等等,宝典中都有详尽而系统的内容。对于准备考试或是加深对知识点理解的学生来说,宝典是一个很好的参考书。 其次,PDF格式的优点也是显而易见的。首先,PDF文件可以在不同设备上进行浏览和分享,比如电脑、手机、平板等,方便学生随时随地进行学习。其次,PDF格式可以保持文档的原始格式,不受操作系统、软件版本等因素的影响,保证了内容的准确性和完整性。此外,PDF文件可以进行书签、标注等操作,方便学生对重要内容进行标记和回顾。 综上所述,张魏满分宝典知识点PDF的结合可以使学生更好地学习和掌握知识点。宝典提供了全面的知识点,而PDF格式则使学习更加便捷和灵活。通过良好的学习方法和工具的使用,相信同学们能够取得好成绩。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值