首页 > 编程语言 >面试官:听说你很了解Java8特性,给我优化一下这段代码吧?

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

时间:2023-11-12 14:38:36浏览次数:43  
标签:面试官 handleStrList 代码 List public boolean StringHandler strList Java8

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

@[toc]

前言

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

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 ,小伙子不错,明天可以来上班了!

标签:面试官,handleStrList,代码,List,public,boolean,StringHandler,strList,Java8
From: https://blog.51cto.com/u_12042397/8328238

相关文章

  • python随机抽取数字的方法和代码
    在Python中,我们可以使用内置的random模块来随机抽取数字。下面是一些示例。从一个列表中随机抽取数字如果你有一个数字列表,并且你想从中随机选择一个数字,你可以使用random.choice函数。pythonimportrandomnumbers=[1,2,3,4,5,6,7,8,9,10]chosen_number=rando......
  • fork后更新仓库代码
    目录fork后更新仓库代码场景:模型操作方法如下:方法一、从github上进行操作然后更新如何在Github网页端同步更新?方法二、通过命令行fetch拉取原仓库更新fork后更新仓库代码场景:github上fork原项目,如何将本地仓库代码更新到最新版本?在github上fork原项目,项目组成员发起pullreq......
  • C语言表白代码
    以下是一个基于C语言的简单表白程序代码,通过打印特定的字符画和文字,向特殊的人表达爱意:#include<stdio.h>intmain(){printf("\n");printf("***************\n");printf("***************************\n");printf......
  • 抖音小程序开发:探索技术创新的代码之旅
    随着抖音小程序的兴起,企业纷纷将目光投向这个充满活力的平台。抖音小程序开发不仅为品牌提供了更广泛的曝光机会,更是技术创新的舞台。本文将带领读者深入探索抖音小程序开发的技术要点,探讨如何通过代码实现个性化、高效的小程序。1.小程序基础框架搭建在进行抖音小程序开发之前,首......
  • 抖音小程序开发实战:打造独特品牌体验的代码之旅
    抖音小程序的崛起为品牌提供了一个全新的数字化平台,而通过深入的抖音小程序开发,品牌不仅能够提升曝光度,更能打造独特的用户体验。在本文中,我们将深入研究抖音小程序开发的关键技术要点,并通过实际代码演示,带领读者走进这个充满创新和技术魅力的开发世界。1.建立小程序基础框架首先,......
  • 11 11 vue3代码优化
     使用axios发送异步请求是这种格式,现在异步请求都封装到api中。说法如下:接口调用的js代码一般都会封装到js文件中,并一函数的形式暴露给外部,例如: 这张图片包括了没有参数和有参数的两种情况 然后在组件中的script中调用函数就行,但这样不行,好像跟什么同步异步有关,反正这样......
  • 程序员如何提高自己的代码能力呢?
    前言程序员如何提高代码能力?个人认为代码能力比较强的程序员应该具备良好的编码习惯并可以输出高质量的代码实现的特征。那么程序员如何提高代码能力的问题,就变成了怎么才能成为一个具备良好编码习惯并可以输出高质量代码实现的程序员。其实很简单,首先,要知道高质量的代码具备哪些特......
  • 二元子句归结的c++代码分析
      1//Tryfurtherlearntclauseminimizationbymeansofbinaryclauseresolution.2boolSolver::binResMinimize(vec<Lit>&out_learnt)3{4//Preparation:rememberwhichfalsevariableswehavein'out_learnt'.5......
  • CentOS7安装Java8
    1.卸载系统自带的OpenJDK以及相关的java文件 键入命令java-version  键入命令rpm-qa|grepjava  把带openjdk的都删除  rpm-e--nodeps 验证是否删干净   2.解压java8到相应目录配置JDK环境变量键入命令 vim/etc/profile修改配置文件,记得要在root权限下修改e......
  • 线性代数 · 矩阵 · Matlab | Moore-Penrose 伪逆矩阵代码实现
    背景-Moore-Penrose伪逆矩阵:对任意矩阵\(A\in\mathbbC^{m\timesn}\),其Moore-Penrose逆矩阵\(A^+\in\mathbbC^{n\timesm}\)存在且唯一。定义:若矩阵G满足\(AGA=A,~GAG=G,~(AG)^H=AG,~(GA)^H=GA\),则G是Moore-Penrose逆矩阵,可以记作\(A^+\)。性质:\(A^......