在 Java 中,有时候需要从一个对象列表中提取某个属性值,并去除重复的值。本文将介绍两种方式来实现这个操作。
方式一:使用 Stream API
Java 8 引入了 Stream API,可以方便地对集合进行处理。我们可以使用 Stream API 的 map() 方法来提取对象列表中的某个属性值,并使用 distinct() 方法去重,最后使用 collect() 方法将结果转换为列表。
示例代码如下:
List<String> propertyValues = objectList.stream() .map(YourObject::getPropertyName) .distinct() .collect(Collectors.toList());
其中,objectList 表示对象列表,YourObject 是对象的类型,getPropertyName() 是获取属性值的方法名,propertyValues 是最终的结果列表。
方式二:自行封装方法
我们也可以自行封装一个方法来实现这个操作。定义一个泛型接口 StringFun,用于获取对象的字符串值。然后,在方法中遍历对象列表,使用该接口的实现来获取属性值,并将不重复的值添加到结果列表中。
示例代码如下:
public interface StringFun<T> {
String getVal(T t);}public static <T> List<String> distinct(List<T> list, StringFun<T> func) {
List<String> ls = new ArrayList<String>();
for (T t : list) {
String val = func.getVal(t);
if (!ls.contains(val)) {
ls.add(val);
}
}
return ls;}其中,list 表示对象列表,func 是一个 StringFun 类型的实例,用于获取属性值。最终的结果是一个字符串列表。
调用方式如下:
List<String> skuIds = ListUtil.distinct(subs, BillsSuperclassSubNum::getClothingId);
其中,subs 表示对象列表,BillsSuperclassSubNum 是对象的类型,getClothingId() 是获取属性值的方法名,skuIds 是最终的结果列表。
如果想要使用 lambda 表达式来简化代码,调用方式如下:
List<String> skuIds = ListUtil.distinct(subs, preSaleTableSubNum -> preSaleTableSubNum.getClothingId());
如果属性值的获取方法是对象的静态方法,可以使用方法引用来进一步简化代码,调用方式如下:
List<String> skuIds = ListUtil.distinct(subs, BillsSuperclassSubNum::getClothingId);
总结:
本文介绍了两种方式来提取 Java 对象列表中的某个属性值,并去重。使用 Stream API 可以简化代码,而自行封装方法则更加灵活,可以根据具体需求来定制获取属性值的方式。
public class test { public static void main(String[] args) { &...
在java中字符串属于对象,刚开始我就疑惑为什么int char等类型都是小写,结果String是大写,java太反人类,后来才知道String是对象。(1).java创建字符串String text = "net"; String tex...
System.out.println("当前时间戳(秒): " + System.currentTimeMillis()/1000); System.out.println("当前时间戳(毫秒): " +&nb...
pattern表示正则表达式,接收正则表达式作为参数例子:String content = "my name is gaojiufeng"; String pattern = "....
(4).java lookingAt匹配字符串和java matches匹配字符串lookingAt不要求整个字符串全匹配,例如me和me_you都是匹配的,但是lookingAt从第一个字符串开始匹配,匹配失败了也不会继续匹配,意味着me和you_me是无法匹配的matches匹配字符串要求全部匹...
(7).java方法重载一个类的两个方法拥有相同的名字,但是有不同的参数列表,叫做方法重载,例如public static int sum(int a, int b) { retur...