java – 如何组合两个流?
发布时间:2020-12-15 08:27:24 所属栏目:Java 来源:网络整理
导读:我正在尝试学习/理解 java中的流并拥有这段代码: List Tag tags = (classA.getTags() != null ? classA.getTags() : new ArrayList());List Integer tagsIds = new ArrayList(Arrays.asList(1,2,3,4));ListInteger ids = tags.stream().map(Tag::getId).col
我正在尝试学习/理解
java中的流并拥有这段代码:
List <Tag> tags = (classA.getTags() != null ? classA.getTags() : new ArrayList<>()); List <Integer> tagsIds = new ArrayList<>(Arrays.asList(1,2,3,4)); List<Integer> ids = tags.stream().map(Tag::getId).collect(Collectors.toList()); tagIds.stream() .filter(tagId -> !ids.contains(tagId)) .forEach(tagId -> { Tag tag = new Tag(); tag.setId(tagId); tags.add(tag); }); 请给我一个提示,告诉我如何将两个流组合成一个流? ——-已添加23.08.2018 ——– List <Tag> tags = (classA.getTags() != null ? classA.getTags() : new ArrayList<>()); List <Integer> tagIds = new ArrayList<>(Arrays.asList(5,7)); tagIds.stream() .filter(tagId -> !tags.stream().map(Tag::getId).collect(Collectors.toList()).contains(tagId)) .forEach(tagId -> { Tag tag = new Tag(); tag.setId(tagId); tags.add(tag); }); 这种修改具有诸如读取和调试代码的复杂性之类的缺点 解决方法List<Tag> combinedTags = Stream .concat( // combine streams tags.stream(),tagIds.stream().map(Tag::new) // assuming constructor with id parameter ) .distinct() // get rid of duplicates assuming correctly implemented equals method in Tag .collect(Collectors.toList()); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |