我在使用Java 8时有些新手,并且正在重构一些旧的代码(对于流操作来说似乎是一个很好的用例).较旧的代码"有效",但在我看来它看起来效率很低.
我的问题的简短版本是我试图找到List的单个元素并用相同元素的更新版本替换它(键是相同的,但每次调用代码时属性都有不同的值) .
try
{
List<Object> items = lookup(itemCache.getKey());
for (int i = 0; i < items.size(); i++)
{
Object originalObject = items.get(i);
if (originalObject.getPropValue() == newObject.getPropValue())
{
List<Object> newItems = new ArrayList<>(items);
newItems.set(i, newObject);
putIntoCache(newObject.getKey(), newItems);
break;
}
}
}
catch (Exception ex) { /*exception handling*/ }
Run Code Online (Sandbox Code Playgroud)
基于我到目前为止所读到的关于流的内容,似乎我需要使用.map()
或者 .filter()
隔离我想要识别的元素,但这似乎也就像在流语句中的任何一个filter
或之后发生的操作一样map
完整列表或列表中每个项目都受到影响.map()
.
这似乎很简单,但我正在努力绕过它.因为初始查找List
本身,我认为流可以取代所有这些.该ArrayList<>()
原代码出现,但项目的顺序并不重要,只要我能够通过它的键替换项目.
如果您选择帮助,谢谢.
我对 golang 开发还很陌生,所以如果这是一个基本问题,我很抱歉。我没有看到已经提出过类似的问题;如果有的话,请指点我(谢谢)。
完整的代码(在我问这个问题时,因为它不是不可变的)位于http://play.golang.org/p/idDp1E-vZo
Node.ipaddr
我已经声明了一个具有四个原始字段的结构,并且我正在从本地文件系统上的文件中读取指定的值(我fileName
在运行时获取作为标志的值;该代码在此处被删除,但在上面提供的链接。)
type Node struct {
hostname string
ipaddr string
pstatus string
ppid int
}
file, err := os.Open(fileName)
if err != nil {
panic(fmt.Sprintf("error opening %s: %v", fileName, err))
}
Run Code Online (Sandbox Code Playgroud)
因为文件是行分隔的,所以我认为 abufio.Scanner
是从文件中读取数据的理想选择。我正在努力寻找一种优雅的方法来将数据实际传递到结构元素中。
我创建了一个元素数组Node
,并考虑了 a map
,但我不确定如何实际使用它(还)。
var nodes []*Node
var nodemap = make(map[string]*Node) //do I even need this?
scanner := bufio.NewScanner(file)
for scanner.Scan() {
if err := scanner.Err(); err != nil {
fmt.Fprintln(os.Stderr, "error reading from file:", err) …
Run Code Online (Sandbox Code Playgroud) 我正在使用以下Dockerfile来构建图像.图像编译得很好.
FROM java:8u40-jdk
ENV CATALINA_HOME="/usr/local/tomcat"
ENV PATH=$CATALINA_HOME/bin:$PATH
RUN mkdir -p "$CATALINA_HOME"
WORKDIR $CATALINA_HOME
ENV TOMCAT_MAJOR 8
ENV TOMCAT_VERSION 8.0.20
ENV TOMCAT_DL_URL http://archive.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz
ENV TOMCAT_ENV local
RUN set -x \
&& curl -fSL "$TOMCAT_DL_URL" -o tomcat.tar.gz \
&& tar -xvf tomcat.tar.gz --strip-components=1 \
&& rm bin/*.bat \
&& rm tomcat.tar.gz
### remove the closing tag, then use the echo|tee pattern to build it back in
RUN sed -i 's|</tomcat-users>| |' $CATALINA_HOME/conf/tomcat-users.xml
RUN echo "<role rolename=\"admin\" />" | tee -a $CATALINA_HOME/conf/tomcat-users.xml \ …
Run Code Online (Sandbox Code Playgroud)