首页 > 解决方案 > 您如何调整顺序搜索以返回多个结果?

问题描述

新网站,对以下任何错误表示歉意。

编辑:将代码添加到Pastebin。为了我从员工到客户的利益,代码被稍微模糊了。抱歉,如果搜索和替换未能找到员工或剩余员工的实例,我自己看不到。

我正在努力解决我认为是一个相对容易的问题。我正在尝试调整顺序搜索以返回匹配的名字。存在多个具有相同名字的实例,必须加以考虑。我有下面的模板可以使用,并且过去有几个示例可以正常工作,但是在调整它以适应多个结果时,我有一个大脑放屁。我什至不确定是返回一系列整数还是字符串。

static int SequentialSearch(int arr[], int searchKey){
    int n = arr.length;
    for (int i = 0; i < n; i++){
       if (arr[i] == searchKey)
       return i;
    }
    return -1;
}

如果在临时数组中返回相关索引时未找到某些内容,我仍然可以返回 -1,还是返回字符串并连接答案的更好方法。将返回 i;找到第一个实例后立即关闭循环还是会完成 for 循环?

在上个月内一直从表现良好转向苦苦挣扎,这个问题使我的所有问题更加复杂。无论如何,我都没有绑定到模板,所以如果存在一个不同的用于多次退货的模板,我将非常感激。

更新:使用上面链接的代码,我得到了回复,但它们都是空的

编辑:响应@MrSmith42 下面的问题请求,预期的输出将是返回具有匹配名字的任何员工的员工详细信息。toString 已经完成,现在在此处开始链接,它适用于不同的输出(排序算法),所以我希望能够在方法正确后重复相同的步骤以轻松地获得正确的输出(可能是徒劳的希望)

标签: javaalgorithmsearch

解决方案


如果没有结果,您可以返回 aList<Customer>或 a 。null或者只是返回列表并使用大小来确定是否有任何结果。

static List<Customer> SequentialSearch(Customer arr[], String firstName) {
    List<Customer> results = new ArrayList<>();
    for (Customer customer : arr) {
        if (customer.getFirstName().equalsIgnoreCase(firstName)) {
            results.add(customer);
        }
    }
    return results.size() > 0 ? results : null;
}

如果您有兴趣,您还可以使用这样的流返回一组客户。

Customer[] results = Arrays.stream(customers).filter(
        c -> c.getFirstName().equalsIgnoreCase(firstName))
            .toArray(Customer[]::new);
// or a list
List<Customer> results = Arrays.stream(customers).filter(
        c -> c.getFirstName().equalsIgnoreCase(firstName))
            .collect(Collectors.toList());

推荐阅读