面试题答案
一键面试public static string ConcatenateNonNullValues<T>(List<T> list) where T : class, new()
{
return list?.Where(item => item.Value != null)
.Aggregate("", (current, item) => current + (string.IsNullOrEmpty(current) ? "" : ",") + item.Value)
?? "";
}
上述代码定义了一个泛型方法 ConcatenateNonNullValues
,它接收一个 List<T>
类型的参数 list
,其中 T
是一个类类型并且有一个无参数构造函数。在方法内部,首先通过 null
条件运算符 ?.
判断 list
是否为 null
,如果不为 null
,则使用 Where
方法过滤出 Value
属性不为 null
的元素,接着使用 Aggregate
方法将这些元素的 Value
属性值以逗号分隔连接起来。最后通过空合并运算符 ??
如果 list
为 null
或者连接结果为空,则返回空字符串。
请注意,在实际使用中,需要确保 T
类型确实具有 Value
属性,上述代码假设 T
类型具有 Value
字符串属性。如果实际情况不同,需要调整代码逻辑。
以下是Java版本代码:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static <T extends HasValue> String concatenateNonNullValues(List<T> list) {
if (list == null) {
return "";
}
return list.stream()
.map(T::getValue)
.filter(str -> str != null)
.collect(Collectors.joining(","));
}
}
interface HasValue {
String getValue();
}
在Java代码中,定义了一个接口 HasValue
要求 T
类型实现 getValue
方法。concatenateNonNullValues
方法先判断 list
是否为 null
,如果不为 null
,则使用流操作过滤掉 null
值,并以逗号连接。
Python版本代码:
from typing import List, Optional, TypeVar
T = TypeVar('T', bound='HasValue')
class HasValue:
@property
def value(self) -> Optional[str]:
return None
def concatenate_non_null_values(lst: Optional[List[T]]) -> str:
if not lst:
return ''
return ','.join(item.value for item in lst if item.value)
在Python代码中,定义了 HasValue
类,要求泛型类型 T
继承自 HasValue
类且具有 value
属性。concatenate_non_null_values
函数首先检查列表是否为空或 None
,如果不为空,则使用生成器表达式过滤出非 null
的 value
值,并使用逗号连接。