新软件可设计环保服装,这些服装能重新组装成新物品

在这里插入图片描述
作者 亚历克斯·希普斯

时尚界瞬息万变的潮流总是让人难以跟上。前一分钟还“流行”的东西,下一季往往就过时了,这可能会让你重新审视自己的衣橱。

然而,紧跟最新的时尚潮流可能既浪费又昂贵。每年大约会产生9200万吨纺织废料,其中包括那些因过时或不合身而被我们丢弃的衣物。但如果我们能将衣服重新组装成任何想要的款式,以适应潮流变化和身材变化,那会怎么样呢?

麻省理工学院计算机科学与人工智能实验室(CSAIL)和Adobe的一组研究人员正试图将环保、多功能的服装变为现实。他们新开发的“Refashion”软件系统通过让用户绘制、规划和可视化服装的每个元素,将服装设计分解为模块——本质上是更小的构建块。该工具能将时尚创意转化为蓝图,详细说明如何将每个部件组装成可重新配置的服装,例如一条可以变成连衣裙的裤子。

“我们希望从一开始就考虑到重复利用来设计服装,”麻省理工学院电气工程与计算机科学系(EECS)博士生、计算机科学与人工智能实验室(CSAIL)和媒体实验室研究员、该项目论文的主要作者丽贝卡·林表示,“如今你买到的大多数衣服都是固定款式的,当你不再想要它们时就会被丢弃。而Refashion(再时尚)则通过帮助我们设计易于改尺寸、修补或重新设计成不同服装的单品,充分利用我们的衣物。”

时尚模块

研究人员开展了一项初步的用户研究,设计师和新手都对Refashion进行了探索,并且能够制作出服装原型。参与者组装出了诸如不对称上衣等作品,这种上衣可以扩展成连体裤,或者改造成正式礼服,而且往往能在30分钟内完成。这些结果表明,Refashion有望让服装原型制作变得更易于上手且更高效。但哪些功能可能促成了这种易用性呢?

其界面首先在“图案编辑器”模式下呈现一个简单的网格,用户可以在其中连接点来勾勒服装的边界。这本质上是绘制矩形面板,并指定不同模块将如何相互连接。

另一种更具创意的方法是改变各个模块的设计。首先,人们可以选择“褶皱”功能,将衣物像手风琴一样自身折叠起来。这对于设计长裙之类的服装很有用。“打褶”选项则增添了艺术感,通过将衣物布料聚拢在一起,打造出蓬松的裙摆或袖子。用户甚至可以选用“省道”模块,它会从布料上裁剪掉一块三角形的部分。这使得在腰部塑形(比如铅笔裙)或为上半身量身定制(例如合身衬衫)成为可能。

当用户设计自己的服装时,系统会自动生成一份简化的组装示意图。纸样被分成带编号的区块,用户可将这些区块拖拽到二维人体模型的不同部位,以确定每个部件的位置。之后,用户可以在一系列不同体型的三维模型上模拟他们设计的环保服装的穿着效果(也可以上传自己的模型)。

最后,可持续服装的数字蓝图可以扩展、缩短或与其他单品组合。多亏了Refashion,一件新单品可能象征着时尚领域的潜在转变:我们不必每次想换一套新衣服就去买新的,只需重新搭配现有的衣服即可。昨天的围巾可以变成今天的帽子,今天的T恤也能变成明天的夹克。

“丽贝卡的研究处于计算与艺术、工艺和设计的激动人心的交叉点,”指导林的麻省理工学院电子工程与计算机科学教授、计算机科学与人工智能实验室首席研究员埃里克·德马因说,“我很期待看到Refashion如何让定制时装设计变得对穿着者触手可及,同时也让服装更具可重用性和可持续性。”

不断变化

尽管Refashion为时尚的未来展现了一个更环保的愿景,但研究人员指出,他们正在积极改进该系统。他们打算修改界面,以支持更耐用的物品,超越标准的原型制作面料。Refashion可能很快也会支持其他模块,比如弧形面板。CSAIL-Adobe团队还可能评估他们的系统是否能使用尽可能少的材料以减少浪费,以及是否能帮助“重新搭配”旧的商店购买的服装。

林还计划开发新的计算工具,帮助设计师利用颜色和纹理打造独特、个性化的服装。她正在探索如何通过拼布的方式设计服装——本质上是从装饰面料、再生牛仔布和钩针块等材料上剪下小块,再将它们组合成一件更大的物品。

林与Adobe研究院的科学家米哈尔·卢卡奇和麦肯齐·利克共同撰写了这篇论文,利克是该论文的资深作者,同时也是麻省理工学院计算机科学与人工智能实验室的前博士后。他们的研究工作部分得到了麻省理工学院晨兴设计学院、麻省理工学院MAKE设计转制造小额资助以及加拿大自然科学与工程研究委员会的支持。研究人员最近在ACM用户界面软件与技术研讨会上展示了他们的研究成果。

<think>好的,用户想知道如何在Java 8中使用Stream API根据某个字段将List重新组装一个的集合。首先,我需要回忆Java 8中的groupingBy收集器的用法。记得groupingBy可以将元素按指定的分类函数分组,返回一个Map,键是字段值,值是对应的元素列表。 然后,用户提到可能需要将List转换为的集合结构,比如根据某个字段分组后的Map,或者提取字段值作为键,元素本身作为值。这时候可能需要使用Collectors.toMap,但要注意处理键冲突的情况,比如使用合并函数,或者直接覆盖。 还要考虑是否需要保持顺序,这时候可能需要使用groupingBy的重载方法,指定使用LinkedHashMap来维持插入顺序。另外,如果用户的需求是提取某个字段的值并去重,可能会用到mapping和toList的组合。 可能用户的实际场景是根据对象的一个属性进行分组,比如按部门分组员工,或者按类别分组商品。需要给出具体的例子,比如Employee类有department字段,然后使用stream().collect(Collectors.groupingBy(Employee::getDepartment))来生按部门分组的Map。 另外,用户可能对生的集合类型有要求,比如希望得到List而不是Map,这时候可能需要结合flatMap或者其他的收集器来处理。不过根据问题描述,用户主要是想根据字段重新组装,所以groupingBy和toMap应该是重点。 还要检查是否有相关的引用内容可以辅助回答。查看提供的引用,虽然大部分是关于数据流的操作,比如FlatMap、Connect、Split等,但可能与集合处理有类似之处。比如,引用1中的FlatMap将句子拆分为单词,类似于将列表元素拆分重组。不过用户的问题更侧重于分组和收集,所以主要使用groupingBy和toMap。 最后,确保代码示例正确,使用Java 8语法,包括静态导入Collectors的方法,以及展示如何处理常见的分组和收集场景。可能还需要提到并行流和线程安全的问题,但用户的问题可能不需要深入这部分。</think>在Java 8中,可以使用Stream API的`Collectors.groupingBy`和`Collectors.mapping`方法根据字段重组集合。以下是具体实现方法: ### 1. 基础分组实现 假设有实体类: ```java class Person { String department; // getter/setter } ``` 根据`department`字段分组: ```java Map<String, List<Person>> grouped = list.stream() .collect(Collectors.groupingBy(Person::getDepartment)); ``` ### 2. 进阶重组操作 #### (1) 分组后提取特定属性 ```java Map<String, List<String>> nameGroups = list.stream() .collect(Collectors.groupingBy( Person::getDepartment, Collectors.mapping(Person::getName, Collectors.toList()) )); ``` #### (2) 转换为自定义集合 ```java TreeMap<String, Set<Person>> sortedGroups = list.stream() .collect(Collectors.groupingBy( Person::getDepartment, TreeMap::new, // 指定Map实现 Collectors.toSet() // 指定值类型 )); ``` ### 3. 多级分组 ```java Map<String, Map<Integer, List<Person>>> multiLevel = list.stream() .collect(Collectors.groupingBy( Person::getDepartment, Collectors.groupingBy(Person::getAge) )); ``` ### 4. 值转换示例 将List转换为`字段值->对象`的映射: ```java Map<String, Person> idMapping = list.stream() .collect(Collectors.toMap( Person::getId, Function.identity(), (oldVal, newVal) -> newVal) // 处理重复键 ); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值