java list字段 新list,Java 8 Streams查找元素并将其添加到新List的开头

我想知道是否可以使用Java Streams一行来解决这个问题:我需要在字符串列表中找到一个字符串并创建另一个列表,其中搜索字符串(如果找到)将是新列表中的第一个字符串然后是其余的String值

对于Eg:

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

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

“Apple”,“Orange”.

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

解决方法:

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

List 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, Avacado, Apple, Orange]

… 相同.

编辑:

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

此方法将每个字符串映射到一个布尔值,该值指出字符串是否等于“巧克力”.在相等的情况下,如果另一个字符串不等于“巧克力”,则Boolean.compare(x,y)将为x返回1,为y返回-1.如果x和y等于“Chocolate”,则结果为0.

由于我们想将“巧克力”移到第一个指数,它的指数必须降低.因此需要一个尊重的比较器(1 => -1和-1 => 1).

标签:java,java-8,java-stream,list

来源: https://codeday.me/bug/20190731/1586886.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值