加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java 8 Streams查找元素并将其添加到新List的开头

发布时间:2020-12-15 08:26:42 所属栏目:Java 来源:网络整理
导读:我想知道是否可以使用 Java Streams一行来解决这个问题:我需要在字符串列表中找到一个字符串并创建另一个列表,其中搜索字符串(如果找到)将是新列表中的第一个字符串然后是其余的String值 对于Eg: ListString oldList = Arrays.asList("Avacado","Apple","O
我想知道是否可以使用 Java Streams一行来解决这个问题:我需要在字符串列表中找到一个字符串并创建另一个列表,其中搜索字符串(如果找到)将是新列表中的第一个字符串然后是其余的String值

对于Eg:

List<String> oldList = Arrays.asList("Avacado","Apple","Orange","Chocolate");

所以现在如果使用过滤器“巧克力”进行搜索,它应该返回一个新列表,其中包含“巧克力”,“Avacado”的元素,
“Apple”,“Orange”.

List<String> newList =  oldList.stream().filter(i -> i.equals("Chocolate")).collect(Collectors.toList()) ???

解决方法

您正在寻求使用Stream的解决方案.这是一:

List<String> sorted = oldList.stream()
            .sorted(Comparator.comparing("Chocolate"::equals).reversed())
            .collect(Collectors.toList());
    System.out.println(sorted);

它给出了:

[Chocolate,Avacado,Apple,Orange]

因此,只有“巧克力”在第一个指数被移动.

但实际上你不需要一个Stream.列表本身就足够了:

oldList.sort(Comparator.comparing("Chocolate"::equals).reversed());
System.out.println(oldList);

结果是

[Chocolate,Orange]

… 相同.

编辑:
我更新了我的答案,因为@Holger指出它违反了Comparator.compare(o1,o2)的合同.我正在使用Holger在他的评论中提出的解决方案.所以他应该被投票,因为我挣扎了两次以获得正确的解决方案.

此方法将每个字符串映射到一个布尔值,该值指出字符串是否等于“巧克力”.在相等的情况下,如果另一个字符串不等于“巧克力”,则Boolean.compare(x,y)将为x返回1,为y返回-1.如果x和y等于“Chocolate”,则结果为0.由于我们想将“巧克力”移到第一个指数,它的指数必须降低.因此需要一个尊重的比较器(1 => -1和-1 => 1).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读