如何调整顺序搜索以返回多个结果



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

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

我认为这是一个相对容易的问题。我正在尝试调整顺序搜索以返回匹配的名字。存在多个同名实例,必须对其进行说明。我有下面的模板可以使用,过去也有几个例子可以使用,没有太大问题,但当涉及到调整它以适应多种结果时,我脑子里会放屁。我甚至不确定是返回一系列int还是字符串。

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已经完成,现在链接在这里的起点,它适用于不同的输出(排序算法(,所以我希望一旦方法正确,就能够重复相同的步骤,以轻松地获得正确的输出(这可能是徒劳的希望(

您可以返回带有结果的List<Customer>,如果没有结果,则返回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());

最新更新