element 相关问题

在元数据中,术语数据元素是具有精确含义或精确语义的数据的原子单元。

将一种元素类型的列表转换为另一种类型的列表

我正在编写一个适配器框架,我需要将对象列表从一个类转换为另一个类。我可以迭代源列表来执行此操作,如下所示 Java:转换列表的最佳方式 我正在编写一个适配器框架,我需要将对象列表从一个类转换为另一个类。我可以迭代源列表来执行此操作,如 所示 Java:将 List 转换为 List 的最佳方法 但是,我想知道是否有一种方法可以在迭代目标列表时即时执行此操作,这样我就不必迭代列表两次。 Java 8 方式: List<String> original = ...; List<Wrapper> converted = original.stream().map(Wrapper::new).collect(Collectors.toList()); 假设 Wrapper 类有一个接受 String 的构造函数。 我对该问题的答案适用于您的情况: import com.google.common.collect.Lists; import com.google.common.base.Functions List<Integer> integers = Arrays.asList(1, 2, 3, 4); List<String> strings = Lists.transform(integers, Functions.toStringFunction()); 转换后的列表是原始集合的视图,因此当访问目标List时会发生转换。 作为迭代器模式的替代方案,您可以使用抽象通用映射器类,并且仅重写转换方法: 为任何数据类型创建通用集合映射器 [可选]创建一个在不同数据类型之间转换的方法库(并覆盖该方法) 使用该库 实施: // Generic class to transform collections public abstract class CollectionTransformer<E, F> { abstract F transform(E e); public List<F> transform(List<E> list) { List<F> newList = new ArrayList<F>(); for (E e : list) { newList.add(transform(e)); } return newList; } } // Method that transform Integer to String // this override the transform method to specify the transformation public static List<String> mapIntegerToStringCollection(List<Integer> list) { CollectionTransformer transformer = new CollectionTransformer<Integer, String>() { @Override String transform(Integer e) { return e.toString(); } }; return transformer.transform(list); } // Example Usage List<Integer> integers = Arrays.asList(1,2); List<String> strings = mapIntegerToStringCollection(integers); 这很有用,因为您每次都必须使用转换来封装流程。 因此,您可以非常轻松地创建集合映射器库。 如果您尝试获取列表中的元素列表,请使用以下代码。这里的对象列表包含属性名称,下面从该列表中获取名称列表 inputList.stream().map(p -> p.getName()).collect(Collectors.toList()); 您可以编写一个映射迭代器来装饰现有迭代器并在其上应用函数。在这种情况下,该函数将对象从一种类型“即时”转换为另一种类型。 类似这样的: import java.util.*; abstract class Transformer<T, U> implements Iterable<U>, Iterator<U> { public abstract U apply(T object); final Iterator<T> source; Transformer(Iterable<T> source) { this.source = source.iterator(); } @Override public boolean hasNext() { return source.hasNext(); } @Override public U next() { return apply(source.next()); } @Override public void remove() { source.remove(); } public Iterator<U> iterator() { return this; } } public class TransformingIterator { public static void main(String args[]) { List<String> list = Arrays.asList("1", "2", "3"); Iterable<Integer> it = new Transformer<String, Integer>(list) { @Override public Integer apply(String s) { return Integer.parseInt(s); } }; for (int i : it) { System.out.println(i); } } } Lambdaj 允许以非常简单且可读的方式做到这一点。例如,假设您有一个整数列表,并且想要将它们转换为相应的字符串表示形式,您可以编写类似的内容; List<Integer> ints = asList(1, 2, 3, 4); Iterator<String> stringIterator = convertIterator(ints, new Converter<Integer, String> { public String convert(Integer i) { return Integer.toString(i); } }); Lambdaj 仅在您迭代结果时应用转换函数。 还有一种更简洁的方法来使用相同的功能。下一个示例假设您有一个具有 name 属性的人员列表,并且您希望在人员姓名的迭代器中转换该列表。 Iterator<String> namesIterator = convertIterator(persons, on(Person.class).getName()); 非常简单。不是吗? 这可能是一个解决方案 --> 通过使用地图 List<Employee> employee = Arrays.asList(new Emp(1, 100), new Emp(2, 200), new Emp(3, 300)); List<Employee> employeS = employee.stream() .map(emp -> new Emp(emp.getId(), emp.getSalary * 100)) .collect(Collectors.toList()); employeS .stream() .forEach(s -> System.out.println("Id :" + s.getId() + " Salary :" + s.getSalary())); 该问题不会重复列表两次。它只迭代一次,并且是迄今为止唯一已知的方法。 您也可以在 google-collections 的 commons-collections 中使用一些转换器类,但它们在幕后都做同样的事情:)以下是一种方法 CollectionUtils.collect(collectionOfIntegers, new org.apache.commons.collections.functors.StringValueTransformer()); 好吧,您可以创建自己的迭代器包装类来执行此操作。 但我怀疑这样做是否能节省很多钱。 这是一个简单的示例,它将任何迭代器包装为 String 迭代器,使用 Object.toString() 进行映射。 public MyIterator implements Iterator<String> { private Iterator<? extends Object> it; public MyIterator(Iterator<? extends Object> it) { this.it = it; } public boolean hasNext() { return it.hasNext(); } public String next() { return it.next().toString(); } public void remove() { it.remove(); } } 我认为您要么必须创建一个自定义列表(实现列表接口)或一个自定义迭代器。例如: ArrayList<String> targetList = new ArrayList<String>(); ConvertingIterator<String> iterator = new ConvertingIterator<String>(targetList); // and here you would have to use a custom List implementation as a source List // using the Iterator created above 但我怀疑这种方法能否为你节省很多。 这是一种即时方法。 (jdk中肯定已经有这样的东西;我只是找不到它。) package com.gnahraf.util; import java.util.AbstractList; import java.util.List; import java.util.Objects; import java.util.function.Function; /** * */ public class Lists { private Lists() { } public static <U,V> List<V> transform(List<U> source, Function<U, V> mapper) { return new ListView<U, V>(source, mapper); } protected static class ListView<U, V> extends AbstractList<V> { private final List<U> source; private final Function<U, V> mapper; protected ListView(List<U> source, Function<U, V> mapper) { this.source = Objects.requireNonNull(source, "source"); this.mapper = Objects.requireNonNull(mapper, "mapper"); } @Override public V get(int index) { return mapper.apply(source.get(index)); } @Override public int size() { return source.size(); } } } 这种转换复杂对象类型的方式非常简单直观,以后可以轻松修改。 class Model { private int start; private int end; private String type; //other variables //acccessors , constructors etc }** Say we need to convert this object into another one listed below. Add a constructor with Model object class TransformModel { private int start; private int end; private String type; TransformeModel(Model model) { this.start = model.start; this.end = model.end; this.type = model.type; }** public List<TransformModel> convertFromModel(List<Model> models) { return models.stream().map(TransformModel::new).collect(Collectors.toList()); } } 为了构建 Alexey Malev 的第一个答案,他们的答案对我有用,但我使用了 Java 21 版本: List<YourClass> yourClass = myClass.stream().map(YourClass::new).toList(); 这是为了将 MyClass 类型的 List 转换为 YourClass 类型的 List,并且列表中的内容相同。

回答 13 投票 0

比较归并排序、自然归并排序和快速排序的运行时间。元素=1000000

当我输入超过250个元素时 当我在不插入自然归并排序代码的情况下运行程序时,我的程序可以运行 1000000 个元素,但是在我插入自然归并排序之后,我的程序可以

回答 1 投票 0

特殊情况< and >

如果我只是随机想在 HTML 中编写 < 或 > 但我不想让它显示为 < or >,我该怎么办。我知道我可以使用 Javascript,但我只是想知道是否有......

回答 1 投票 0

CSS 网格:创建具有不同 Z 索引的重叠网格项

我正在使用 CSS 网格进行布局,其中我需要两个网格项相互重叠。重叠元素应具有不同的 z-index 值来控制哪个元素出现在顶部。然而...

回答 1 投票 0

如何通过流设置List元素属性?

我对java8流有一个简单的需求,情况如下: 目前,解决这个问题的方法是对列表进行排序,然后按索引设置排名属性, 那么有没有更好的方法来解决这个问题

回答 2 投票 0

数组中的Java测试元素[重复]

可能的重复: 在Java中,如何测试数组是否包含某个值? 我正在尝试做一种: for(字符串 s : myArray) { if(s is in newArray) //你如何测试这个?我想要

回答 2 投票 0

如何将HTML元素属性值字符串转换为类似onclick的功能

我正在使用自定义元素,这些元素在发生某些事情后执行回调。 在 HTML 中添加此元素时, ...

回答 1 投票 0

替换空元素

作为我工作流程的一部分,我收到 xml 文件,有时特定元素为空,这会导致系统出现问题,这是一个示例输入文件: 作为我工作流程的一部分,我收到 xml 文件,有时特定元素为空,这会导致系统出现问题,这是一个示例输入文件: <?xml version="1.0" encoding="UTF-8"?> <CompositionPlaylist xmlns="http://www.xml.com/20040511#"> <Id>urn:uuid:129de837-6eed-40d4-a635-db58380dfd9e</Id> <AnnotationText>Title</AnnotationText> <IssueDate>2014-09-22T19:18:56.001+01:00</IssueDate> <Issuer>issuer</Issuer> <Creator>Creator Name</Creator> <ContentTitleText>Content Title</ContentTitleText> <ContentKind>feature</ContentKind> <ContentVersion> <Id>urn:uuid:e52a4259-ecad-4630-be51-cf13f95d8b82</Id> <LabelText>Title of the media</LabelText> </ContentVersion> <RatingList/> <ReelList> <Reel> <Id>urn:uuid:1b840b2b-7526-4597-ae2d-81994f8e9867</Id> <AnnotationText>FeG_r1_new</AnnotationText> <AssetList> <MainPicture> <Id>urn:uuid:e6ac03bd-65a5-4dab-bb24-682c6b5bf61a</Id> <EditRate>24 1</EditRate> <IntrinsicDuration>25965</IntrinsicDuration> <EntryPoint>0</EntryPoint> <Duration>25965</Duration> <Hash>3VTtxrGsVs1AsE4JXU12wdF/U0o=</Hash> <FrameRate>24 1</FrameRate> <ScreenAspectRatio>1.77</ScreenAspectRatio> </MainPicture> <MainSound> <Id>urn:uuid:1202f14c-13ce-4585-8a3f-fd489b6c6bac</Id> <EditRate>24 1</EditRate> <IntrinsicDuration>25990</IntrinsicDuration> <EntryPoint>0</EntryPoint> <Duration>25965</Duration> <Hash>cU4riXDJwfsQ9rL7tkd0c8nZgWw=</Hash> <Language>und</Language> </MainSound> </AssetList> </Reel> 有时元素“ContentVersion”是空的,如下所示: <ContentVersion> <LabelText/> </ContentVersion 用“虚拟”元素替换该元素就可以了,就像这样 <ContentVersion> <Id>urn:uuid:11111111-1111-1111-1111-111111111111</Id> <LabelText>DUMMY</LabelText> </ContentVersion> 采取的步骤 尝试过 XSLT 转换,但找不到用 cild 替换完整元素的方法 当您说 ContentVersion 不能为空时,我不确定您到底想要测试什么,但是例如,如果您的测试是它必须有一个非空 LabelText,那么您的 XSLT 转换就可以了 <xsl:template match="ContentVersion[not(LabelText) or LabelText = '']"> <ContentVersion> <Id>urn:uuid:11111111-1111-1111-1111-111111111111</Id> <LabelText>DUMMY</LabelText> </ContentVersion> </xsl:template> 如果您对“空”的定义不同,请根据您的口味调整谓词。

回答 1 投票 0

更改向量的元素[重复]

我有一个“矩阵”,然后选择一行作为“向量”,然后更改该向量中的一个元素。 然而,“矩阵”中的元素也会发生变化。为什么? 矩阵 = [[1,2,3],[4,5,6],[7,8,9]] 向量...

回答 3 投票 0

在Python中编辑列表列表的列表[重复]

我正在尝试编辑列表列表中的元素,但它正在编辑多个元素。 L1 = [[0,0] 用于范围 (2) 中的计数] L2 = [L1 用于范围 (2) 中的计数] L2[0][0][0] = 5 优先...

回答 1 投票 0

R 中 N 元素与 q 元素的组合

我有 N=6 个元素和 q=3 个元素,符号为 0,1,2。 我想创建所有 N=6 个元素的向量,其中 2 个元素等于 0,2 个元素等于 1,2 个元素等于 2。

回答 3 投票 0

在java中比较同一数组的元素

我正在尝试比较同一数组的元素。这意味着我想将 0 元素与其他所有元素进行比较,将 1 元素与其他所有元素进行比较,依此类推。问题是它...

回答 5 投票 0

JMeter 中用于随机变量配置元素的“随机函数种子”的可用值是什么

需要知道 JMeter 中用于随机变量配置元素的“随机函数种子”的可用值是什么。 (有例子就更好了)

回答 2 投票 0

从 Abaqus 的 Python 脚本中的元素列表定义集合

我有一个名为 E3 的元组,其中包含元素编号,例如: (数组([ 136, 2593, 3061, 4348], dtype=int64),) 现在,我想定义这些元素的集合。 到现在为止,我还没有成功...

回答 1 投票 0

当我使用数组而不是单个元素时反应本机错误

我用 React Native 编写了这段代码。 但是当我运行它时,我只得到一个错误。怎么了?看来我确实很接近答案了。我已经尝试了一切,但仍然不起作用。 出口定义...

回答 1 投票 0

Shadow DOM 中如何等待元素可见的解决方案

目前,Robot Framework 库中没有现成的解决方案来说明如何等待元素在 Shadow DOM 中的页面上可见。我想出了一种方法。或许会有用...

回答 1 投票 0

动态更改 HTML 元素的属性?

我正在尝试将图像和特定 HTML 元素的内容更改为存储在 .js 文件中的内容。内容存储在导入到 main.js 的另一个 js 文件中声明的对象中。

回答 1 投票 0

插入元素后,Sizeof 运算符无法正常工作

我正在尝试用 C 语言编写一个程序来将元素插入数组。 我使用 sizeof 运算符来确定数组的元素总数,但在插入元素并重用 sizeof 运算符之后...

回答 1 投票 0

Selenium-Java:如何动态指定页面定位器?

首先;如果我下面使用的一些与代码相关的语言没有多大意义,我深表歉意,因为我对 Java 还比较陌生。 我有一个用于生成随机测试数据的 Java 类,并且

回答 1 投票 0

我可以使用带有多个 id 的 document.getElementById() 吗?

doStuff(document.getElementById("myCircle1" "myCircle2" "myCircle3" "myCircle4")); 这不起作用,所以我需要逗号或分号才能使其起作用吗?

回答 18 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.