面试官:听说你很了解Java8特性,给我优化一下这段代码吧?

news2024/11/18 14:39:32

在这里插入图片描述

文章目录

      • 前言
      • 我的想法
      • 面试官

前言

在之前的一次面试过程中,我被问到了一道代码优化题:对于下面的代码,你有什么优化的思路呢?

boolean handleStrList(String strList){
	for (String s :strList){
		if(s.length()%2==0){
			return true;
		}	
}
boolean handleStrList(String strList){
    for (String s :strList){
    	if("S".equals(s)){
        	return true;
    	}	
}

我的想法

这段代码我一看,入参和出参都一样,并且都是for循环处理,只有中间处理的逻辑不一样,这完全可以用策略模式解决:

我这里将不同的字符串处理逻辑封装在策略类中,每个策略类都实现同一个接口或抽象类。然后,在调用方根据具体需求选择或切换不同的策略类来处理字符串列表,从而优化代码和逻辑。

import java.util.List;

public interface StringHandlerStrategy {
    boolean handleStrList(List<String> strList);
}

public class EvenLengthHandler implements StringHandlerStrategy {
    @Override
    public boolean handleStrList(List<String> strList) {
        return strList.stream().anyMatch(s -> s.length() % 2 == 0);
    }
}

public class SpecialCharacterHandler implements StringHandlerStrategy {
    @Override
    public boolean handleStrList(List<String> strList) {
        return strList.contains("S");
    }
}

public class StringHandler {
    private StringHandlerStrategy strategy;

    public StringHandler(StringHandlerStrategy strategy) {
        this.strategy = strategy;
    }

    public boolean execute(List<String> strList) {
        return strategy.handleStrList(strList);
    }
}

我定义了一个名为StringHandlerStrategy的接口,该接口声明了处理字符串列表的方法。然后,实现了两个具体的策略类:EvenLengthHandlerSpecialCharacterHandler,它们分别处理偶数长度的字符串和包含特殊字符的字符串。

最后,创建了一个StringHandler类,它包含一个策略对象,并将具体的处理任务委派给选定的策略对象。

通过使用策略模式,我们可以很容易地添加、切换或扩展不同的处理策略,提供了更灵活和可扩展的代码结构。

对应的测试类:

public class StringHandlerTest {

    @Test
    public void testEvenLengthHandler() {
        List<String> strList = Arrays.asList("Hello", "World", "Good", "Morning");
        StringHandler handler = new StringHandler(new EvenLengthHandler());
        boolean result = handler.execute(strList);
        Assertions.assertTrue(result);
    }

    @Test
    public void testSpecialCharacterHandler() {
        List<String> strList = Arrays.asList("Hello", "World", "Special", "Character");
        StringHandler handler = new StringHandler(new SpecialCharacterHandler());
        boolean result = handler.execute(strList);
        Assertions.assertFalse(result);
    }

}

您好,面试官,这是我的解答思路以及代码,您看怎么样呢?

面试官

面试官点了点头,嗯,还不错,这是一种不错且常见的思路,那你还有什么别的想法吗?

对了,我看你的简历中有写到熟悉Java8特性,那你能用Java8的一些特性来给我优化一下吗?

我思考了一番,想了想,策略模式不就是对应Java8中的函数式接口吗:

 public static void handleStrList(List<String> strList, Predicate<String> predicate) {
        for (String str : strList) {
            if (predicate.test(str)) {
                filteredList.add(str);
            }
        }
    }

    public static void main(String[] args) {
        List<String> stringList = List.of("apple", "banana", "cherry", "dates", "elderberry", "fig");

        Predicate<String> startsWithPredicate = str -> str.startsWith("b");
        System.out.println("Strings starting with 'b':");
        handleStrList(stringList, startsWithPredicate);

        Predicate<String> containsPredicate = str -> str.contains("aa");
        System.out.println("Strings containing 'aa':");
        handleStrList(stringList, containsPredicate);
    }

面试官: OK ,小伙子不错,明天可以来上班了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1129384.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

测试用例的设计方法(全):等价类划分方法

一.方法简介 1.定义 是把所有可能的输入数据,即程序的输入域划分成若干部分&#xff08;子集&#xff09;,然后从每一个子集中选取少数具有代表性的数据作为测试用例。该方法是一种重要的,常用的黑盒测试用例设计方法。 2.划分等价类&#xff1a; 等价类是指某个输入域的…

祝各位程序员节日快乐

今天是1024程序员节&#xff0c;小编祝各位Windows开机蓝屏&#xff0c;Linux开机Kernel Panic&#xff0c;macos开机五国&#xff0c;服务器iDRAC/ iLO/IPMI/KVM全部失联&#xff0c;路由器全爆炸&#xff0c;路由表内存全溢出&#xff0c;交换机全环路&#xff0c;防火墙全阻…

Spring Security加密和匹配

一. 密码加密简介 1. 散列加密概述 我们开发时进行密码加密&#xff0c;可用的加密手段有很多&#xff0c;比如对称加密、非对称加密、信息摘要等。在一般的项目里&#xff0c;常用的就是信息摘要算法&#xff0c;也可以被称为散列加密函数&#xff0c;或者称为散列算法、哈希…

清华训练营悟道篇之浅谈操作系统

文章目录 前言系统软件执行环境操作系统的功能操作系统组成 前言 操作系统是一个帮助用户和应用程序使用和管理计算机资源的软件&#xff0c;它控制着嵌入式设备、更通用的系统&#xff08;如智能手机、台式计算机和服务器&#xff09;以及巨型机等各种计算机系统 系统软件 …

【模型部署】c++部署yolov5使用openvino

1. 推理方式 CPU推理GPU推理&#xff08;要求电脑具备核显&#xff0c;即CPU中有嵌入显卡&#xff09; 2. openvino依赖项下载 https://github.com/openvinotoolkit/openvino/releases 直接解压&#xff08;随便放到哪个路径&#xff09; 环境配置 ********&#xff08;…

Text Classification via Large Language Models

Abstract 表达大模型在文本分类上做的不好。 原因&#xff1a; 1、处理复杂语境时缺少推理能力。(e.g… 类比、讽刺) 2、限制学习的上下文的token数。 提出了自己的策略&#xff1a; ** Clue And Reasoning Prompting (CARP).线索与推理提示** 1、能用prompt找到clue(语境线索…

Mysql进阶-存储引擎篇

MySQL体系结构 其他数据库相比&#xff0c;MySQL有点与众不同&#xff0c;它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎上&#xff0c;插件式的存储引擎架构&#xff0c;将查询处理和其他的系统任务以及数据的存储提取分离。 这种架构可以根据业务的需…

RK3568平台开发系列讲解(应用篇)串口应用编程之串口的使用步骤

🚀返回专栏总目录 文章目录 一、配置参数1.1、获取当前串口的配置参数1.2、修改和写入串口的配置参数二、模式2.1、输入模式2.2、输出模式2.3、控制模式2.4、本地模式2.5、特殊控制字符沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 串口设备是嵌入式开发中最常用的…

Facebook批量注册如何做?一文教会你

我们都知道单个代理地址注册多个社媒账号&#xff0c;基本第二天都会进入到一个风控状态&#xff0c;要申诉或者封号&#xff0c;批量注册需要用不同的地址进行注册&#xff0c;推荐使用动态代理代理,下面是需要准备到的环境和材料以及注册的全流程。 一、环境需求 1、接码平…

STM32定时器介绍

STM32F103系列单片机定时器主要有&#xff1a;系统定时器SysTick&#xff0c;2个高级定时器TIM1和TIM8&#xff0c;4个通用定时器TIM2/3/4/5&#xff0c;2个基本定时器TIM6和TIM7。下面先简单介绍一下&#xff1a; 基本定时器&#xff1a;基本定时器只能计时&#xff0c;不能产…

MIT-BIH-AF 数据集开发库

目录 1 介绍数据集2 本博客函数库代码地址以及介绍读取dat,qrc,atr文件&#xff0c;获得 ECG_rpeaks&#xff0c;ann_aux_note&#xff0c;ann_sample&#xff0c;ECG0寻找时间点函数----signal_time_sample寻找R_R峰信号以及其位置----find_R_R_peak寻找 nR 峰信号以及位置---…

springboot实现邮箱发送(激活码)功能

第一步&#xff1a;现在邮箱里面开启smtp服务 这里用163邮箱举例&#xff0c;配置一下授权密码&#xff0c;这个要提前记住 第二步&#xff1a;引入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/P…

大语言模型(LLM)综述(三):大语言模型预训练的进展

A Survey of Large Language Models 前言4. PRE-TRAINING4.1数据收集4.1.1 数据源4.1.2 数据预处理4.1.3 预训练数据对LLM的影响 4.2 模型架构4.2.1 典型架构4.2.2 详细配置 前言 随着人工智能和机器学习领域的迅速发展&#xff0c;语言模型已经从简单的词袋模型&#xff08;B…

Banana Pi 开源社区发布BPI-M6开源硬件开发板,支持6.75TOPs算力

香蕉派BPI-M6 采用深蕾半导体Vs680芯片设计&#xff0c;板载4G LPDDR4和16G eMMC存储 香蕉派BPI-M6是香蕉派社区在2022年推出的新一代单板计算机&#xff0c;它采用深蕾半导体(Synaptics) VS680四核Cortex-A73 (2.1GHz)和一个Cortex-M3处理器&#xff0c;Imagination GE9920 G…

【C++面向对象】6. 指向类的指针

文章目录 【 1. 基本原理 】【 2. 实例 】 【 1. 基本原理 】 一个指向 C 类的指针与指向结构体的指针类似&#xff0c;访问指向类的指针的成员&#xff0c;需要使用 成员访问运算符 ->&#xff0c;就像访问指向结构的指针一样。 【 2. 实例 】 // 使用指向类的指针&…

2.8.C++项目:网络版五子棋对战之对战玩家匹配管理模块的设计

文章目录 一、意义二、功能三、设计四、阻塞队列&#xff08;一&#xff09;功能&#xff08;二&#xff09;框架&#xff08;三&#xff09;代码 五、匹配管理&#xff08;一&#xff09;功能&#xff08;二&#xff09;设计&#xff08;三&#xff09;框架&#xff08;四&…

GoLand设置Go Modules的Environment信息

在golang中&#xff0c;如果没有设置环境信息&#xff0c;就不会自动下载go.mod中设置的包&#xff0c;这时候&#xff0c;我们就需要设置一下环境信息 GOPROXYhttps://goproxy.cn,direct 图片如下&#xff1a;

【机器学习】集成学习Boosting

文章目录 集成学习BoostingAdaBoost梯度提升树GBDTXGBoostxgboost库sklearn APIxgboost库xgboost应用 集成学习 集成学习&#xff08;ensemble learning&#xff09;的算法主要包括三大类&#xff1a;装袋法&#xff08;Bagging&#xff09;&#xff0c;提升法&#xff08;Boo…

Python基础入门例程10-NP10 牛牛最好的朋友们

目录 描述 输入描述&#xff1a; 输出描述&#xff1a; 示例1 解答&#xff1a; 说明&#xff1a; 描述 牛牛有两个最好的朋友&#xff0c;他们的名字分别用input读入记录在两个字符串中&#xff0c;请使用字符串连接&#xff08;&#xff09;帮助牛牛将两个朋友的名字依…

大灰狼远程管理[SVIP3会员版]易语言源码

大灰狼远程管理[SVIP3会员版]易语言源码 下载地址&#xff1a;https://user.qzone.qq.com/512526231/main https://user.qzone.qq.com/3503787372/main