区块链技术博客
www.b2bchain.cn

Java 8单独的列表元素类别 – java程序员分享

本文介绍了Java 8单独的列表元素类别 – java程序员分享,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

给定我有一个列表,所有列表都继承自同一基类:

class Item {     protected String name;      public Item(String name) {          this.name = name;   }    getName() {        return name;   } }  class ItemA extends Item {...} class ItemB extends Item {...}  List<Item> itemList = Arrays.asList(new ItemA("itemA"), new ItemB("itemB")); 

就我而言,我无法控制这些类的实现方式,但是我需要将列表分为两个包含相应元素名称的不同列表。

这是包含大量ifinstanceof语句的解决方案的首次尝试:

List<String> itemAList = new ArrayList<>(); List<String> itemBList = new ArrayList<>();  itemList.forEach(item -> {      if(item instanceof ItemA) {          itemAList.add(item.getName());     }             else if(item instanceof ItemB) {          itemBList.add(item.getName());     } }); 

因此这可行,但是我对如何避免if语句进行了思考。由于我使用的是Java 8,因此可以执行以下操作:

List<String> itemAList = itemList.stream()     .filter(ItemA.class::isInstance)     .map(item -> item.getName())     .collect(Collectors.toList());  List<String> itemBList = itemList.stream()     .filter(ItemB.class::isInstance)     .map(item -> item.getName())     .collect(Collectors.toList()); 

这也可以,但是这意味着我必须处理两次列表。

正如我说的,我与Item类的实现无关,那么实现这种行为的最佳方法是什么?

问候

[编辑:]谢谢您的所有答复。我今天学到了一些新东西。

参考方案

您可以根据元素的类别对内容进行分组:

Map<Class, List<String>> grouped = itemList.stream()         .collect(Collectors.groupingBy(Item::getClass,                 Collectors.mapping(Item::getName, Collectors.toList()))); 

并以以下方式访问它:

List<String> itemAList = grouped.get(ItemA.class); 

如我所见,在使用Java 8 Stream时,显而易见的代码无论是“对象”流还是原始流(即IntStream和朋友)都将仅使用:someStreamableResource.stream().whatever() 但是,然后,相当多的“流媒体资源”也有了.parallelStream()。读取javadoc时不清楚的是.stream()流是否始终是顺序的,以…

我这里没有什么代码int b=3; b=b >> 1; System.out.println(b); 它可以完美工作,但是当我将变量b更改为byte,short,float,double时,它包含错误,但是对于变量int和long来说,它可以完美工作,为什么它不能与其他变量一起工作? 参考方案 位移位运算符(例如>>)与任何整数类型兼…

我的要求是通过匹配任何属性的字符串来过滤对象列表。例如,假设Contact类具有三个属性:街道,城市,电话。我知道java流过滤器是如何工作的,在这里我必须将输入字符串与每个属性进行比较,如下所示:contactList.stream().filter(contact -> contact.getStreet().equals("dubai&…

我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 🙂

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » Java 8单独的列表元素类别 – java程序员分享
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们