写在前面
上篇文章我们开始讲解了JDK中的Stream流的两个方法的区别,今天我们接着来看JDK8-Stream中的一些使用方案。
问题
今日问题是:Stream流如何针对List某个对象属性进行去重操作,并且输出单一属性的集合对象。
如何解决
问题已经抛出来了,那么如何解决呢?
让我们分成几步来逐一解决一下。
先解决输出单一属性的集合对象问题,这个更简单一些,用普通的方式我们是应该怎么写呢?
来看如下代码示例:
@Data @AllArgsConstructor @NoArgsConstructor public class Test { private String name; private String pwd; public static void main(String[] args) { List<Test> list = new ArrayList<>(); List<String> resultList = new ArrayList<>(); list.add(new Test("张三", "123456")); list.add(new Test("张三1", "123456")); list.add(new Test("张三2", "123456")); list.add(new Test("张三2", "123456")); list.add(new Test("张三3", "123456")); list.add(new Test("张三4", "123456")); list.add(new Test("张三4", "123456")); for (Test test : list){ resultList.add(test.getName()); } System.out.println(resultList.toString()); } }
以上方式是普通写法,利用循环来获取属性并放入新的集合中。
如果使用Stream流的话,那就不一样了,我们可以通过一行代码就能获取到相应的结果了。
来看一下示例吧:
List<String> resultList = list.stream().map(Test::getName).collect(Collectors.toList());
一行代码搞定,接下来我们再来看一下如何去重其中的重复属性吧。
现在我们已经获得了resultList集合,其中有着所有的Name属性值,但是其中存在一些重复值,这时候我们使用Stream中的哪个方法呢?
很简单,Stream流提供了一个distinct方法,用于将集合去重操作。
代码如下:
List<String> resultList = list.stream().map(Test::getName).distinct().collect(Collectors.toList());
我们在map方法后加入了一个distinct方法,这样就可以做到去重操作了。
来看一下运行结果:
总结
今天的问题就是这些了,你还有其他的去重方案吗?